考虑如果数字范围没有这么大的话,直接做一个差分数组就可以了
但现在变大了 所以要用一个map来维护
1 #include<bits/stdc++.h> 2 #define pa pair<int,int> 3 #define CLR(a,x) memset(a,x,sizeof(a)) 4 using namespace std; 5 typedef long long ll; 6 const int maxn=2e5+10; 7 8 inline ll rd(){ 9 ll x=0;char c=getchar();int neg=1; 10 while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();} 11 while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); 12 return x*neg; 13 } 14 15 map<ll,int> cnt; 16 ll ans[maxn]; 17 18 int main(){ 19 int i; 20 int N=rd(); 21 for(i=1;i<=N;i++){ 22 ll l=rd(),r=rd(); 23 cnt[l]++,cnt[r+1]--; 24 } 25 ll j=0,k=0; 26 for(map<ll,int>::iterator it=cnt.begin();it!=cnt.end();it++){ 27 ans[k]+=(it->first-j); 28 k+=it->second;j=it->first; 29 } 30 for(i=1;i<=N;i++){ 31 printf("%I64d ",ans[i]); 32 } 33 return 0; 34 }