hdu1556 Color the ball
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556
思路:
我自己是用线段树做的
后来看了kuangbin的博客,发现用树状数组更简单,而且很妙,就自己也敲了一下
对于会树状数组的同学来说理解代码应该很简单,直接贴代码了啊
代码:
1 #include<cstdio> 2 #include<iostream> 3 #include<string> 4 #include<iostream> 5 #include<cstring> 6 using namespace std; 7 8 const int MAXN=100010; 9 int c[MAXN]; 10 int n; 11 12 int lowbit(int x) 13 { 14 return x&(-x); 15 } 16 void add(int i,int val) 17 { 18 while(i<=n) 19 { 20 c[i]+=val; 21 i+=lowbit(i); 22 } 23 } 24 int sum(int i) 25 { 26 int s=0; 27 while(i>0) 28 { 29 s+=c[i]; 30 i-=lowbit(i); 31 } 32 return s; 33 } 34 int main() 35 { 36 int a,b; 37 while(scanf("%d",&n),n) 38 { 39 memset(c,0,sizeof(c)); 40 for(int i=0;i<n;i++) 41 { 42 scanf("%d%d",&a,&b); 43 add(a,1); 44 add(b+1,-1); 45 } 46 for(int i=1;i<n;i++) 47 cout<<sum(i)<<" "; 48 cout<<sum(n)<<endl; 49 } 50 return 0; 51 }