题意说的是给a,b区间涂色 问你1-n每个点被涂色多少次
那么我们在change函数里注意是change(a,1)
change(b+1,-1)用了差分
然后getsum直接是第几个 因为我们用差分处理过了 不需要getsum(i)-getsum(i-1)
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
const int MAX_N = 100000;
int C[MAX_N*2];
int n;
void change(int x,int c){
for(;x<=MAX_N;x+=x&(-x))
C[x]+=c;
}
int getsum(int x){
int res= 0;
for(;x;x-=x&(-x))
res+=C[x];
return res;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
int a,b;
scanf("%d%d",&a,&b);
change(a,1);
change(b+1,-1);
}
for(int i=1;i<=n;++i){
i==n?printf("%d\n",getsum(i)):printf("%d ",getsum(i));
}
return 0;
}