题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556
题意:n个气球排成一排,随机选两个气球a,b,给这区间的所有气球都涂上一次颜色,最终每个气球被上了多少次色。
思路:定义一个一维dif数组,dif[a]++,之后的dif[a]之后的数组全都加上前一个元素。直到dif[b+1],这时对dif[b+1]--,这样就对dif[b+1]以及其之后的数字没有影响。
代码:
#include<iostream>
#include<cstring>
using namespace std;
int ans[200005];
int main(){
int n,t,i,a,b,m;
while(cin>>n){
if(n==0) return 0;
m=n;
memset(ans,0,sizeof(ans));
while(n--){
cin>>a>>b;
ans[a]++;
ans[b+1]--;
}
cout<<ans[1];
for(i=2;i<=m;i++){
ans[i]=ans[i]+ans[i-1];
cout<<" "<<ans[i];
}
cout<<endl;
}
return 0;
}