题解:区间和
acwing802:区间和
802.区间和
假定有一个无限长的数轴,数轴上每个坐标上的数都是 0
现在,我们首先进行 n 次操作,每次操作将某一位置 × 上的数加 c。
近下来,进行 m 次询问,每个询问包含两个整数和,你需要求出在区间[l,r]之间的所有数的和。
输入格式
第一行包含两个整数 n 和 m。
接下来 n 行,每行包含两个整数 x 和 c。
再接下里 m 行,每行包含两个整数和 r.
输出格式
共 m 行,每行输出一个询问中所求的区间内数字和。
离散化
解题思路:
这道题可以采用前缀和的基本套路,但是,由于数据的范围很大,并且在范围区间内的数的个数却很少,所以开辟一个很大的数组并不合适,应该将区间内的数字重新映射到一个小范围的区间内,然后再按照前缀和的处理办法处理。
cpp:
#include<iostream>
#include<algorithm>
#include<vector>
typedef pair<int,int> PII
using namespace std;
int N = 300010;
int m,n;
int a[N], s[N];
vector<int> alls;
vector<PII> add,query;
//查找给定元素再映射后的数组的下标
int