注解
1、前缀和。b[start]++,b[end+1]–,然后每次输出的就是前一个位数的数值加上此位数的数值,即a[i]=a[i-1]+b[i]。(这个思想非常巧妙,非常值得学习)
代码
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 100005;
int a[MAXN];
int b[MAXN];
int main() {
int N;
cin>>N;
while(N) {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
for(int i=0; i<N; i++) {
int s, e;
cin>>s>>e;
b[s]++;
b[e+1]--;
}
for(int i=1; i<=N; i++) {
a[i] = a[i-1]+b[i];
if(i==1) {
cout<<a[i];
} else {
cout<<" "<<a[i];
}
}
cout<<endl;
cin>>N;
}
return 0;
}