ACWing 4195. 线段覆盖

 

 

 

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 map<ll,int>mp;
 5 const int N=1e6;
 6 ll ans[N];
 7 int main()
 8 {
 9   int m;
10   scanf("%d",&m);
11   for(int i=1;i<=m;i++)
12   {
13     ll l,r;
14     scanf("%lld%lld",&l,&r);
15     mp[l]++;mp[r+1]--;
16   }
17  
18   ll sum=0,pre=-1;
19   for(auto &[v,d]:mp)
20   {
21     if(pre!=-1)ans[sum]+=v-pre;
22     sum+=d;
23     pre=v;
24   }//b[L]+d b[R+1]-d;对应原数组a[L]---a[R] +d;∑b[i]=a[1]-a[0]+a[2]-a[1]+...+a[i]-a[i-1]=a[i];//a[0]=0;
25     //对于端点 L,R a[L]---a[R]的区间改变量取决于a[L];
26   for(int i=1;i<=m;i++)printf("%lld ",ans[i]);
27   return 0;
28 }

 

posted @ 2021-12-13 16:57  matt-11  阅读(46)  评论(0)    收藏  举报