离散化

简介: 笔记

离散化


①:要求保序

排序、判重、二分

vector<int>alls;
int find(int x){ //二分
    int l = 0, r = alls.size();
    while(l < r){
        int mid = l+ r >> 1;
        if(alls[mid] >= x)r = mid;
        else l = mid + 1;
    }
    return r + 1;
}
sort(alls.begin(),alls.end()); //排序
alls.erase(unique(alls.begin(),alls.end()),alls.end()); //判重

②:不要求保序

map或hash表

int n;
map<int,int>s;
int get(int x) {
  if (s.count(x) == 0)s[x] = ++n;
  return s[x];
}


AcWing 802. 区间和


假定有一个无限长的数轴,数轴上每个坐标上的数都是0。


现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。


接下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。


输入格式

第一行包含两个整数n和m。


接下来 n 行,每行包含两个整数x和c。


再接下里 m 行,每行包含两个整数l和r。


输出格式

共m行,每行输出一个询问中所求的区间内数字和。


数据范围

8.png

代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int, int>PII;
const int N = 300010;
int a[N], s[N];
vector<int>alls;
vector<PII>add, query;
int find(int x){
    int l = 0, r = alls.size();
    while(l < r){
        int mid = l+ r >> 1;
        if(alls[mid] >= x)r = mid;
        else l = mid + 1;
    }
    return r + 1;
}
int main(){
    int n,m;cin >> n >>m;
    for(int i=1;i<=n;++i){
        int x,c;cin >> x >>c;
        alls.push_back(x);
        add.push_back({x,c});
    }
    for(int i=1;i<=m;++i){
        int l,r;cin >> l >>r;
        query.push_back({l,r});
        alls.push_back(l);
        alls.push_back(r);
    }
    sort(alls.begin(),alls.end());
    alls.erase(unique(alls.begin(),alls.end()),alls.end());
    for(auto it:add){
        int x = find(it.first);
        a[x] += it.second;
    }
    for(int i = 1;i<=alls.size();++i){
        s[i] = s[i - 1] + a[i];
    }
    for(auto it :query){
        int l = find(it.first);
        int r = find(it.second);
        printf("%d\n",s[r] - s[l - 1]);
    }
    return 0;
}


目录
相关文章
|
机器学习/深度学习 算法 数据可视化
浅析特征数据离散化的几种方法(上)
什么是离散化? 离散化就是把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。例如:
|
机器学习/深度学习 存储
卡方分箱、KS分箱、最优IV分箱、树结构分箱、自定义分箱
卡方分箱、KS分箱、最优IV分箱、树结构分箱、自定义分箱
2508 0
卡方分箱、KS分箱、最优IV分箱、树结构分箱、自定义分箱
|
5月前
|
人工智能 算法 C++
c++算法学习笔记 (11) 离散化
c++算法学习笔记 (11) 离散化
|
5月前
|
大数据
stata具有异方差误差的区间回归
stata具有异方差误差的区间回归
|
5月前
|
算法 数据挖掘 数据处理
超实用!五种常用的多离散化小技巧
超实用!五种常用的多离散化小技巧
150 0
|
12月前
为什么进行线性回归前需要对特征进行离散化处理?
为什么进行线性回归前需要对特征进行离散化处理?
177 1
|
机器学习/深度学习 决策智能
矩阵分析 (七) 矩阵特征值的估计
矩阵分析 (七) 矩阵特征值的估计
156 0
|
算法
离散化算法
离散化算法
65 0
概率论笔记(六)一维正态分布/二维正态分布/多维正态分布
概率论笔记(六)一维正态分布/二维正态分布/多维正态分布
256 0
下一篇
无影云桌面