poj 2352 Stars 树状数组
2017-03-24 20:28
330 查看
题目链接:
http://poj.org/problem?id=2352题意:
给你一系列点(按y递增,x递增排列),level[X] 指的是 在当前点的左下方 包括自己 的点数为X 的这些点的个数。题解:
树状数组y递增,不管y,只要维护x就行了
读入一个点,找到比他小的点的个数,也就是他的等级,然后将这个等级的点的个数加一即可
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; typedef long long ll; #define MS(a) memset(a,0,sizeof(a)) #define MP make_pair #define PB push_back const int INF = 0x3f3f3f3f; const ll INFLL = 0x3f3f3f3f3f3f3f3fLL; inline ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } ////////////////////////////////////////////////////////////////////////// const int maxn = 32000+10; int bit[maxn],level[maxn]; void add(int x,int v){ while(x < maxn){ bit[x] += v; x += x&-x; } } int sum(int x){ int res = 0; while(x > 0){ res += bit[x]; x -= x&-x; } return res; } int main(){ int n=read(); MS(level); int x,y; for(int i=0; i<n; i++){ x=read(),y=read(); x++; add(x,1); level[sum(x)]++; } for(int i=1; i<=n; i++) cout << level[i] << endl; return 0; }
相关文章推荐
- POJ2352 Stars 树状数组
- poj 2352 Stars(线段树||树状数组)
- POJ 2352_Stars && POJ-2481 Cows (线段树单点更新+树状数组)
- POJ 2352|URAL 1028|Stars|树状数组
- POJ 2352-Stars-树状数组
- Stars - POJ 2352 树状数组
- 求左下角星星之和 树状数组或线段树 poj 2352 Stars
- POJ 2352 Stars 树状数组
- poj 2352 Stars 树状数组
- poj 2352 Stars--树状数组
- POJ 2352 Stars 树状数组
- POJ-2352-Stars-树状数组
- POJ 2352 Stars 解题思路,树状数组
- POJ 2352 Stars & UESTC 1584 Washi与Sonochi的约定 排序+树状数组
- POJ 2352 Stars | 树状数组
- POJ2352 Stars(线段树 & 树状数组)
- POJ 2352 Stars 树状数组
- Stars (poj 2352 树状数组)
- 【树状数组第一弹】poj 2352——Stars
- POJ 2352 Stars 树状数组