1. 程式人生 > >POJ - 2352 - Stars

POJ - 2352 - Stars

esp () 數組 col mem target spl 循環 所有

題目鏈接:POJ - 2352

題目大意:

給你N個星星的坐標,問每個星星的左下角有幾顆星星。

註意輸入坐標y是按遞增輸入的。

題目分析:

算是樹狀數組的一個基礎題目吧,有些題目也是以這道題為基礎的。

直接運用數組數組即可,具體看代碼。

不過註意由於x坐標有可能是0,所以要對所有的X坐標加一(不要忘了區間上界也要增大一個),

防止add()函數出現死循環超時。

給出代碼:

技術分享
 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5
using namespace std; 6 const int N=32000; 7 int vis[32000+10]; 8 int ans[32000]; 9 int bit(int x) 10 { 11 return (x&(-x)); 12 } 13 int sum(int x) 14 { 15 int s=0; 16 while(x>0) 17 { 18 s+=vis[x]; 19 x-=bit(x); 20 } 21 return s; 22 } 23 int add(int
x,int pos) 24 { 25 while(pos<=N+1) 26 { 27 vis[pos]+=x; 28 pos+=bit(pos); 29 } 30 } 31 int main() 32 { 33 int n; 34 scanf("%d",&n); 35 memset(vis,0,sizeof(vis)); 36 memset(ans,0,sizeof(ans)); 37 for(int i=0;i<n;i++) 38 { 39 int
x,y; 40 scanf("%d%d",&x,&y); 41 //printf("%d\n",sum(x+1)); 42 ans[sum(x+1)]++; 43 add(1,x+1); 44 } 45 for(int i=0;i<n;i++) 46 printf("%d\n",ans[i]); 47 return 0; 48 }
View Code

POJ - 2352 - Stars