思路:
相当于全部区间更新完后再查询
对于区间 l~r 更新时 对数组中 a[l] 加一,a[r+1]减一
这样相当于用a[l]代表这个区间,从左更新时,用一个数加上a[l],那l点对应的区间也得到了更新,r点减一后,停止了对应区间的更新
最后从左往右遍历,令t,每次+a[i]
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e5 + 7;
int n;
int a[maxn];
int main() {
while(~scanf("%d",&n) && n!=0) {
memset(a, 0, sizeof a);
for(int i = 1; i <= n; ++i) {
int l_, r_;
scanf("%d%d", &l_, &r_);
a[l_]++;
a[r_+1]--;
}
int t = 0;
for(int i = 1; i <= n; ++i) {
t += a[i];
printf("%d%c", t, (i == n ? '\n' : ' '));
}
}
return 0;
}