假定有一个无限长的数轴,数轴上每个坐标上的数都是0。
现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。
近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。
输入格式
第一行包含两个整数n和m。
接下来 n 行,每行包含两个整数x和c。
再接下里 m 行,每行包含两个整数l和r。
输出格式
共m行,每行输出一个询问中所求的区间内数字和。
数据范围
−109≤x≤109−109≤x≤109,1≤n,m≤1051≤n,m≤105,−109≤l≤r≤109−109≤l≤r≤109,−10000≤c≤10000−10000≤c≤10000
输入样例:
3 31 23 67 51 34 67 8
输出样例:
805 思路:这是一道可以用离散化来做的题目,题中要求我们对数轴上随机的一些位置家伙加上一些数,因为位置可能非常大,也可能是负数,所以直接用数组下标的表示方法是不合适的,所以我们考虑使用离散化的技巧;然后我们离散化之后 需要通过给出的l,r算出l到r中数的和,因为数的总范围可能会到1e5,然后最多可能又1e5次查询,所以考虑到时间复杂度的情况我们想到用前缀和,在寻找映射过程中也使用到了二分。 AC代码:
#include #include #include