poj2352 树状数组

来源:互联网 发布:windows route delete 编辑:程序博客网 时间:2024/06/05 11:03

题意:

给出星星数量n,这n颗星星的坐标,每颗星星的等级等于它左下方的星星数(包含等于的情况)

同时给出的坐标是先按y排序,再按x排序的(升序)

即如果坐标是(x,y),那么它的等级就等于前面已经输入的在[0,x]区间的星星数量

想了想,线段树查询,单点更新也很裸,不过是学树状数组~相比起来代码好少似的。。

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int c[32001];int level[15010];int lowbit(int x){return x&(-x);}void modify(int i)//更新{while(i<=32001)    {c[i]++;i+=lowbit(i);}}int sum(int i)//求和{int s=0;while(i>0)    {s+=c[i];i-=lowbit(i);}return s;}int main(){int n;scanf("%d",&n);int x,y;for(int i=1;i<=n;i++)    {scanf("%d%d",&x,&y);level[sum(++x)]++;modify(x);}for(int i=0;i<n;i++){printf("%d/n",level[i]);}return 0;}


0 0
原创粉丝点击