POJ - 2352 - Stars
阿新 • • 發佈:2017-08-20
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> 5View Codeusing 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(intx,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 intx,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 }
POJ - 2352 - Stars