POJ Stars

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 }
posted @ 2012-09-15 20:57  YORU  阅读(268)  评论(0编辑  收藏  举报