当前位置:网站首页>【离散化+前缀和】Acwing802. 区间和
【离散化+前缀和】Acwing802. 区间和
2022-08-02 14:11:00 【超级码力奥】
参考题解:https://www.acwing.com/solution/content/13511/
// 很好的分析过程:https://www.acwing.com/solution/content/13511/
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N = 300010; //n次插入和m次查询相关数据量的上界
int n, m;
// 存离散化之后的插入的值
int a[N];
// 存数组a的前缀和
int s[N];
vector<int> alls; // 存所有与插入和查询相关的坐标
vector<pair<int, int>> add, query; // 存储插入和询问操作的数据
// 返回输入的坐标离散化之后的下边
int find(int 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;
}
// 至于为啥返回r + 1,是因为让a和前缀和数组从1开始处理
// 方便使用前缀和运算。
return r + 1;
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i ++)
{
int x, c;
scanf("%d%d", &x, &c);
add.push_back({
x, c});
alls.push_back(x);
}
for(int i = 1; i <= m; i ++)
{
int l, r;
scanf("%d%d", &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());
// 执行前n次插入操作
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];
// 处理后m次询问操作
for(auto item : query)
{
int l = find(item.first);
int r = find(item.second);
printf("%d\n", s[r] - s[l - 1]);
}
return 0;
}
边栏推荐
猜你喜欢
Win11系统找不到dll文件怎么修复
pygame draw arc
Use tencent cloud builds a personal blog
测试用例练习
STM32LL library - USART interrupt to receive variable length information
Win10 Settings screen out from lack of sleep?Win10 set the method that never sleep
cmake configure libtorch error Failed to compute shorthash for libnvrtc.so
Detailed explanation of MATLAB drawing function fplot
基于矩阵计算的线性回归分析方程中系数的估计
队列与栈
随机推荐
Win11 keeps popping up User Account Control how to fix it
5.事务管理
MATLAB绘图函数fplot详解
推开机电的大门《电路》(二):功率计算与判断
Win11电脑一段时间不操作就断网怎么解决
Actual combat Meituan Nuxt +Vue family bucket, server-side rendering, mailbox verification, passport authentication service, map API reference, mongodb, redis and other technical points
TCP三次握手、四次挥手
Please make sure you have the correct access rights and the repository exists. Problem solved
模板系列-二分
Mysql连接错误解决
Codeforces Round #605 (Div. 3)
Mysql的锁
4. Publish Posts, Comment on Posts
How to update Win11 sound card driver?Win11 sound card driver update method
Introduction to MATLAB drawing functions ezplot explanation
LeetCode 2353. 设计食物评分系统 维护哈希表+set
二叉排序树与 set、map
Network Security Packet Capture
5. Transaction management
SQL的通用语法和使用说明(图文)