当前位置:网站首页>【14. 区间和(离散化)】
【14. 区间和(离散化)】
2022-07-01 14:28:00 【小呆鸟_coding】
离散化
- 假设一共有105个数,每个数的值域是0~109,有些题目可能会使用这些值下标来做,但是我们如果开一个长度是109数组是不现实的。这时候就需要用到
映射
。 - 我们需要把这个序列映射到从1开始的
连续自然数
,这个过程就叫离散化。
性质
- 整个值域的跨度很大,但是非常稀疏,例如一共有109个数,但是我们只用到了105个数
步骤
- 打算在x的值上加上一个c,此时首先找到x的离散化后的值k,然后再a[k] + c.
- 求前缀和也是,求[l, r]之间的数的和,首先找到 l 和 r离散化后的值
离散化需要解决的来个问题
前提a[ ]是有序的。
- a[ ]中可能出现重复元素,需要对它进行
去重
- 如何算出x 的离散化后的值,一般用
二分
区间和
假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。
现在,我们首先进行 n次操作,每次操作将某一位置 x 上的数加 c。
接下来,进行 m 次询问,每个询问包含两个整数 l和 r,你需要求出在区间 [l,r][l,r] 之间的所有数的和。
输入格式
第一行包含两个整数 n 和 m。
接下来 n 行,每行包含两个整数 x 和 c。
再接下来 m 行,每行包含两个整数 l 和 r。
输出格式
共 m 行,每行输出一个询问中所求的区间内数字和。
数据范围
−109 ≤ x ≤ 109
1 ≤ n, m ≤ 105
−109 ≤ l ≤ r ≤ 109
−10000 ≤ c ≤ 10000输入样例:
3 3 1 2 3 6 7 5 1 3 4 6 7 8
输出样例:
8 0 5
代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; using PII = pair<int, int>; //因为输入是一对,所以用pair来存放 //typedef pair<int, int> PII; const int N = 300010; int n, m; int a[N], s[N]; //a[N]是要存放的数,s[N]是前缀和 vector<int> alls; //我们存的所有离散化的值 vector<PII> add, query; //第一个是插入操作,第二个是询问 //首先把所有的数读进来,把用到的下标,离散化。 int find(int x) //求一下x离散化后的结果 { int l = 0, r = alls.size() - 1; while (l < r) { int mid = l + r >> 1; if (alls[mid] >= x) r = mid; else l = mid + 1; } return r + 1; //把数映射到下标从1开始,因为后面求区间[l, r]中数的和用到前缀和,下标从1,不用处理边界问题 } int main() { cin >> n >> m; for (int i = 0; i < n; i ++) { int x, c; cin >> x >> c; add.push_back({ x, c}); //将数放在add中 alls.push_back(x); //再将数,放到待离散化后的alls数组中 } for (int i = 0; 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 item : add) { int x = find(item.first); a[x] += item.second; } //预处理前缀和 for (int i = 1; i <= alls.size(); i ++) s[i] = s[i - 1] + a[i]; //处理前询问 for (auto item : query) { int l = find(item.first), r = find(item.second); cout << s[r] - s[l - 1] << endl; } return 0; }
unique函数的实现
vector<int>:: iterator unique(vector<int> &a) { int j = 0; for (int i = 0; i < a.size(); i ++) { if(!i || a[i] != a[i - 1]); a[j ++] = a[i]; } //a[0] ~ a[j - 1]所有a中不重复的数 return a.begin() + j; }
边栏推荐
- Blog recommendation | in depth study of message segmentation in pulsar
- Research Report on the development trend and competitive strategy of the global display filter industry
- WebSocket(简单体验版)
- Use the right scene, get twice the result with half the effort! Full introduction to the window query function and usage scenarios of tdengine
- Use lambda function URL + cloudfront to realize S3 image back to source
- Research Report on the development trend and competitive strategy of the global camera filter bracket industry
- leetcode622. Design cycle queue (C language)
- Research Report on the development trend and competitive strategy of the global high temperature label industry
- MySQL log
- 逻辑是个好东西
猜你喜欢
微服务开发步骤(nacos)
How can we protect our passwords?
phpcms实现订单直接支付宝支付功能
What "hard core innovations" does Intel have in the first half of 2022? Just look at this picture!
sqlilabs less9
QT community management system
Vnctf2022 open web gocalc0
sqlilabs less9
[dynamic programming] interval dp:p1005 matrix retrieval
sqlilabs less-8
随机推荐
Vnctf2022 open web gocalc0
Use the right scene, get twice the result with half the effort! Full introduction to the window query function and usage scenarios of tdengine
从零开发小程序和公众号【第三期】
The integration of computing and Internet enables the transformation of the industry, and the mobile cloud lights up a new roadmap for the future of digital intelligence
In depth cooperation | Taosi data cooperates with changhongjia Huawei customers in China to provide tdengine with powerful enterprise level products and perfect service guarantee
Après avoir été licencié pendant trois mois, l'entrevue s'est effondrée et l'état d'esprit a commencé à s'effondrer.
使用 Lambda 函数URL + CloudFront 实现S3镜像回源
逻辑是个好东西
Force deduction solution summary 241- design priority for operation expression
MySQL log
sqlilabs less-11~12
Play with mongodb - build a mongodb cluster
What class loading mechanisms does the JVM have?
Phpcms realizes the direct Alipay payment function of orders
Research Report on the development trend and competitive strategy of the global powder filling machine industry
[repair version] imitating the template of I love watching movies website / template of ocean CMS film and television system
sqlilabs less10
Why did you win the first Taosi culture award of 20000 RMB if you are neither a top R & D expert nor a sales Daniel?
SWT / anr problem - how to open binder trace (bindertraces) when sending anr / SWT
Research Report on the development trend and competitive strategy of the global aviation leasing service industry