hdu 1556(树状数组)
题意:易知。。。
思路:要求对树状数组的理解。
代码实现:
#include<iostream> #include<cmath> using namespace std; int n,a[100001]; int lowbit(int x) { return x&(-x); } void build(int x,int y)//建树 { while(x<=n) { a[x]+=y; x+=lowbit(x); } } int sum(int x)//求和 { int s=0; while(x>0) { s=s+a[x]; x=x-lowbit(x); } return s; } int main() { while(scanf("%d",&n)!=EOF&&n) { int x,y; memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); build(x,1); build(y+1,-1);//关键所在 } for(i=1;i<n;i++) printf("%d ",sum(i)); printf("%d\n",sum(n)); } return 0; }
posted on 2013-03-09 15:34 后端bug开发工程师 阅读(738) 评论(0) 编辑 收藏 举报