当前位置:网站首页>【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; }
边栏推荐
- This paper introduces an implementation scheme to enhance the favorite transaction code management tool in SAP GUI
- Scheme of printing statistical information in log
- Research Report on the development trend and competitive strategy of the global powder filling machine industry
- Research Report on the development trend and competitive strategy of the global facial wrinkle removal and beauty instrument industry
- After being laid off for three months, the interview ran into a wall everywhere, and the mentality has begun to collapse
- Use the npoi package of net core 6 C to read excel Pictures in xlsx cells and stored to the specified server
- Oracle-数据库对象的使用
- 户外LED显示屏应该考虑哪些问题?
- 241. 为运算表达式设计优先级
- One of the data Lake series | you must love to read the history of minimalist data platforms, from data warehouse, data lake to Lake warehouse
猜你喜欢

Websocket (simple experience version)

【商业终端仿真解决方案】上海道宁为您带来Georgia介绍、试用、教程

Salesforce、约翰霍普金斯、哥大 | ProGen2: 探索蛋白语言模型的边界

2022-2-15 learning xiangniuke project - Section 1 filtering sensitive words

被裁三個月,面試到處碰壁,心態已經開始崩了

phpcms实现订单直接支付宝支付功能
![[NLP] pre training model - gpt1](/img/bd/9803ad946b33159de51b93106a2151.png)
[NLP] pre training model - gpt1

那个很努力的学生,高考失败了……别慌!你还有一次逆袭机会!

QT community management system

This paper introduces an implementation scheme to enhance the favorite transaction code management tool in SAP GUI
随机推荐
643. Maximum average number of subarrays I
【商业终端仿真解决方案】上海道宁为您带来Georgia介绍、试用、教程
生成随机数(4位、6位)
Advanced C language
Today, with the popularity of micro services, how does service mesh exist?
[IOT completion. Part 2] stm32+ smart cloud aiot+ laboratory security monitoring system
2022-2-15 learning xiangniuke project - Section 1 filtering sensitive words
[Verilog quick start of Niuke question series] ~ use functions to realize data size conversion
That hard-working student failed the college entrance examination... Don't panic! You have another chance to counter attack!
C 语言基础
2022. Let me take you from getting started to mastering jetpack architecture components - lifecycle
Summary of leetcode's dynamic programming 5
[dynamic programming] interval dp:p1005 matrix retrieval
Research Report on the development trend and competitive strategy of the global commercial glassware industry
Provincial election + noi Part 10 probability statistics and polynomials
sqlilabs less-11~12
Research Report on the development trend and competitive strategy of the global traditional computer industry
leetcode622.设计循环队列(C语言)
Using CMD to repair and recover virus infected files
日志中打印统计信息的方案

