http://poj.org/problem?id=2352
刚开始想对二维的是怎么更新的, 后来才知道原来Y轴是递增.也就是对同一个点来说, 每次Y增加的都是这个这个点现在的层数的下一层.
然后想, 如果它在当前点的X又点了一下,按照题意,相当于在同一点点了连续点了两下.
其实每次更新一层...Y表示层数
View Code
1 #include <iostream> 2 using namespace std; 3 const int maxn=60000; 4 int ans[maxn]; 5 int stars[maxn]; 6 int lowbit(int x) 7 { 8 return x&(-x); 9 } 10 void mod(int x,int c) 11 { 12 int i; 13 for(i=x;i<=maxn;i+=lowbit(i)) 14 ans[i]+=c; 15 } 16 int getSum(int x) 17 { 18 int sum=0,i; 19 for(i=x;i>0;i-=lowbit(i)) 20 sum+=ans[i]; 21 return sum; 22 } 23 int main() 24 { 25 int t,temp,x,y,i; 26 cin>>t; 27 for(i=0;i<t;i++) 28 { 29 cin>>x>>y; 30 mod(x+1,1); 31 32 temp=getSum(x+1)-1; 33 stars[temp]++; 34 } 35 for(i=0;i<t;i++) 36 cout<<stars[i]<<endl; 37 return 0; 38 }