当前位置:网站首页>【离散化+前缀和】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;
}
边栏推荐
- Detailed explanation of Golang garbage collection mechanism
- General syntax and usage instructions of SQL (picture and text)
- What should I do if Windows 10 cannot connect to the printer?Solutions for not using the printer
- pygame拖动条的实现方法
- Actual combat Meituan Nuxt +Vue family bucket, server-side rendering, mailbox verification, passport authentication service, map API reference, mongodb, redis and other technical points
- 将SSE指令转换为ARM NEON指令
- A clean start Windows 7?How to load only the basic service start Windows 7 system
- 如何用硬币模拟1/3的概率,以及任意概率?
- 7. Redis
- Win10电脑不能读取U盘怎么办?不识别U盘怎么解决?
猜你喜欢
2.登录退出,登录状态检查,验证码
Based on the least squares linear regression equation coefficient estimation
Redis的线程模型
Detailed introduction to drawing complex surfaces using the plot_surface command
二叉树的遍历:递归法/ 迭代法/ 统一迭代法(强QAQ)
General syntax and usage instructions of SQL (picture and text)
Open the door of electricity "Circuit" (1): voltage, current, reference direction
Summarize computer network super comprehensive test questions
推开机电的大门《电路》(一):电压,电流,参考方向
How to solve Win11 without local users and groups
随机推荐
Knapsack Problem - Dynamic Programming - Theory
MATLAB制作简易小动画入门详解
4.发布帖子,评论帖子
Codeforces Round #624 (Div. 3)
win10无法直接用照片查看器打开图片怎么办
基于最小二乘法的线性回归分析方程中系数的估计
Mysql之MVCC
Mapreduce环境详细搭建和案例实现
Win11电脑一段时间不操作就断网怎么解决
Win10安装了固态硬盘还是有明显卡顿怎么办?
IPV4和IPV6是什么?
1.开发社区首页,注册
4. Publish Posts, Comment on Posts
pygame拖动条的实现方法
Compilation error D8021: Invalid numeric argument '/Wextra' cl command line error d8021 invalid numeric argument '/Wextra'
mysql的索引结构为什么选用B+树?
How to reinstall Win7 system with U disk?How to reinstall win7 using u disk?
Lightweight AlphaPose
TCP三次握手、四次挥手
General syntax and usage instructions of SQL (picture and text)