Bob给他的女朋友准备了n个气球作为生日礼物,不过他觉得这样还是不够有诚意,于是他将n个气球排成一排,从左到右依次编号1,2,3,......,n-1,n。之后Bob准备进行m次涂颜色的操作,每次选择两个数a,b(1<=a<=b<=n),给第a个气球到第b个气球涂一次颜色。
不过m次操作后,Bob已经忘记他给每个气球涂了多少次颜色了,你能帮他算出每个气球被涂过几次颜色吗?
输入第一行为两个整数n,m. 接下来的m行,每行包括2个整数a b(1 <= a <= b <= N)。输出
一行,包括n个整数,第i个数代表第i个气球总共被涂色的次数数据范围
对于30%的数据: n,m<=1000 对于60%的数据: n,m<=50000 对于100%的数据:n,m<=200000输入样例
输入样例1: 3 3 1 1 2 2 3 3 输入样例2: 3 3 1 1 1 2 1 3 输入样例3: 2 1 1 2输出样例
输出样例1: 1 1 1 输出样例2: 3 2 1 输出样例3: 1 1
解析:差分数组处理离线的区间修改操作
放代码:
#include#include #define RANGE 320005 int c[RANGE]; int n; int lowbit( int x ) { return x&(-x); } void add( int i ,int val) { while( i<=n) { c[i]+=val; i+=lowbit(i); } } int sum( int i ) { int su=0; while( i>0 ) { su+=c[i]; i-=lowbit(i); } return su; } int main() { int i,x,y,m; scanf("%d%d",&n,&m) ; memset(c,0,sizeof(c)); for ( i=0; i



