POJ2352 Stars [树状数组模板]
题意:输入一n颗星星的x,y坐标,给定判断level的标准,即某颗星星左下边(不高于它,不超过他,相当于以他为基准的第三象限)星星的数目为level,
输出level从0到n的星星个数。
1 //poj2352 2 #include <iostream> 3 #include <string> 4 #include <cstring> 5 #include <queue> 6 #include <vector> 7 #include <cstdio> 8 using namespace std; 9 const int maxn=32002; 10 int s[15005]; 11 int c[maxn]; 12 13 int lowbit(int x)//求编号,也就是2的k次方的k 14 { 15 return x&(-x); 16 } 17 int getsum(int x)//1到x之间点的个数 18 { 19 int sum=0; 20 for(int i=x;i>=1;i-=lowbit(i)) 21 { 22 sum+=c[i]; 23 } 24 return sum; 25 } 26 void add(int x,int y)//在x加y的值,相关节点自动更新 27 { 28 for(int i=x;i<=maxn;i+=lowbit(i)) 29 c[i]+=y; 30 } 31 void rs_add(int l,int r,int x)//区间修改 32 { 33 add(l,x); 34 add(r+1,-x); 35 } 36 int main() 37 { 38 int n; 39 while(scanf("%d",&n)!=EOF) 40 { 41 memset(c,0,sizeof(c)); 42 memset(s,0,sizeof(s)); 43 for(int i=1;i<=n;i++) 44 { 45 int x,y; 46 scanf("%d%d",&x,&y); 47 x++;//有x=0的情况,但c下标从1开始 48 s[getsum(x)]++;//先查询,因为算出的总个数不包括自己,sum(x)表示以前的点x小于等于当前点的x值的个数 49 add(x,1); 50 } 51 for(int i=0;i<n;i++) 52 printf("%d\n",s[i]); 53 } 54 55 return 0; 56 }
分类:
OJ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步