标签:.com close each blank numbers equal pre owb win
Description
Input
Output
Sample Input
5 1 1 5 1 7 1 3 3 5 5
Sample Output
1 2 1 1 0
题意:给出一个星星的坐标,问从(0,0)到(x,y)的矩形区域内包含了不含有本身的星星的个数,然后从0-->(n-1)输出
思路:首先由于y是从小到大输入的所以只要对x进行统计就行了。介绍一下树状数组:线段树通过对x->min(2^n)以及以上2^n进行更新就表示在其后方插入了一个数值即为(Up函数)当统计时就是计算其前方和最近的2^n的和。
给出一个树状数组的链接:http://blog.csdn.net/int64ago/article/details/7429868
AC代码:
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 int a[40000],b[40000],c[40000]; 7 int lowbit(int x) 8 { 9 return x&(-x); 10 } 11 //增加一个元素 12 int up(int x) 13 { 14 while(x<35000) 15 { 16 a[x]++; 17 x=x+lowbit(x); 18 } 19 return 0; 20 } 21 //求和 22 int sum(int x) 23 { 24 int ans; 25 ans=0; 26 while(x) 27 { 28 ans=ans+a[x]; 29 x=x-lowbit(x); 30 } 31 return ans; 32 } 33 int main() 34 { 35 int n,k,flag; 36 int x,y; 37 while(~scanf("%d\n",&n)) 38 { 39 k=0; 40 memset(a,0,sizeof(a)); 41 memset(b,0,sizeof(b)); 42 //memset(c,0,sizeof(c)); 43 for(int i=0; i<n; i++) 44 { 45 scanf("%d%d",&x,&y); 46 x++; 47 b[sum(x)]++; 48 up(x); 49 } 50 for(int i=0; i<n; i++) 51 { 52 printf("%d\n",b[i]); 53 } 54 } 55 return 0; 56 }
标签:.com close each blank numbers equal pre owb win
原文地址:http://www.cnblogs.com/wang-ya-wei/p/6013501.html