C++-POJ2352-Stars[数据结构][树状数组]

/*
虽然题目没说,但是读入有以下特点 
由于,输入是按照按照y递增,如果y相同则x递增的顺序给出的
所以,可以利用入读的时间进行降为处理
*/

于是我们就得到了一个一维的树状数组解法啦

值得一提:坐标从0~32000,而树状数组是从1开始的

于是,我们对所有下标+1,数组开到32002就可以啦!

 1 #include <set>
 2 #include 
 3 #include 
 4 #include 
 5 #include 
 6 #include 
 7 #include 
 8 #include 
 9 #include 
10 #include 
11 using namespace std;
12 const int MAXN=15001,MAXX=32002;
13 int t[MAXX],n;
14 int lb(int i){return i&-i;}
15 void init(){memset(t,0,sizeof(t));}
16 void add(int x,int v){for(int i=x;iv;}
17 int sum(int x){int ans=0;for(int i=x;i;i-=lb(i))ans+=t[i];return ans;}
18 
19 int level[MAXN],x,y;
20 int main(){
21     scanf("%d",&n);
22     for(int i=1;i<=n;i++)scanf("%d%d",&x,&y),level[sum(x+1)]++,add(x+1,1);
23     for(int i=0;i"%d\n",level[i]); 
24     return 0;
25 }

 

你可能感兴趣的:(C++-POJ2352-Stars[数据结构][树状数组])