AcWing 802. 区间和

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 802. 区间和相关的知识,希望对你有一定的参考价值。

题目连接

https://www.acwing.com/problem/content/804/

思路

用一个map用来映射我们的真实地址和逻辑地址,然后用一个map来存储真实地址的值,然后再单独开一个b数组求得是逻辑地址得前缀和,然后二分一下l和r输出即可,这里要注意边界问题

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000009
#define endl "\\n"
#define PII pair<int,int>
const int N = 2e6+10;
ll n,m,a[N];
ll b[N];
map<ll,ll> loc,value;

int main()

	cin>>n>>m;
	int x,c;
	int cnt = 0;
	for(int i = 1;i <= n; ++i) 
		cin>>x>>c;
		if(!value[x])
			a[++cnt] = x;
		value[x] += c;
	
	sort(a+1,a+1+cnt);
	for(int i = 1;i <= cnt; ++i) 
		loc[a[i]] = i;
	
	for(int i = 1;i <= cnt; ++i) 
		b[i] = b[i-1] + value[a[i]];
	
	ll l,r,L,R;
	while(m--) 
		
		cin>>l>>r;
		L = lower_bound(a + 1,a + cnt + 1,l) - a;
		R = lower_bound(a + 1,a + cnt + 1,r) - a;
		if(a[R] != r) R--;
		cout<<b[R]-b[L-1]<<endl;
	

	return 0;

以上是关于AcWing 802. 区间和的主要内容,如果未能解决你的问题,请参考以下文章

离散化(AcWing.802)

蓝桥杯AcWing 题目题解 - 二分与前缀和差分

AcWing 3493 - 最大的和 - 前缀和

AcWing算法基础课排序 二分 高精度 前缀和 差分 双指针 位运算 离散化 区间合并

AcWing 795.前缀和

AcWing 795. 前缀和