jzoj 1979 【树状数组】 星星点灯
2017-03-03 11:57
369 查看
天文学家经常要检查星星的地图,每个星星用平面上的一个点来表示,每个星星都有坐标。我们定义一个星星的“级别”为给定的星星中不高于它并且不在它右边的星星的数目。天文学家想知道每个星星的“级别”。
例如上图,5号星的“级别”是3(1,2,4这三个星星),2号星和4号星的“级别”为1。
给你一个地图,你的任务是算出每个星星的“级别”。
Input
输入的第一行是星星的数目N(1<=N<=60000),接下来的N行描述星星的坐标(每一行是用一个空格隔开的两个整数X,Y,0<=X,Y<=32000)。星星的位置互不相同。星星的描述按照Y值递增的顺序列出,Y值相同的星星按照X值递增的顺序列出。
Output
输出包含N行,一行一个数。第i行是第i个星星的“级别”
Sample Input
5
1 1
5 1
7 1
3 3
5 5
Sample Output
0
1
2
1
3
Data Constraint
解题思路:由于题目对输入x,y的限制,直接用树状数组求和x就好了,但要注意x可能=0,出现卡死的情况,所以维护树状数组的时候记得加1.
例如上图,5号星的“级别”是3(1,2,4这三个星星),2号星和4号星的“级别”为1。
给你一个地图,你的任务是算出每个星星的“级别”。
Input
输入的第一行是星星的数目N(1<=N<=60000),接下来的N行描述星星的坐标(每一行是用一个空格隔开的两个整数X,Y,0<=X,Y<=32000)。星星的位置互不相同。星星的描述按照Y值递增的顺序列出,Y值相同的星星按照X值递增的顺序列出。
Output
输出包含N行,一行一个数。第i行是第i个星星的“级别”
Sample Input
5
1 1
5 1
7 1
3 3
5 5
Sample Output
0
1
2
1
3
Data Constraint
解题思路:由于题目对输入x,y的限制,直接用树状数组求和x就好了,但要注意x可能=0,出现卡死的情况,所以维护树状数组的时候记得加1.
#include <cstdio> #include <cstring> #define F(i,x,y) for(int i=x;i<=y;i++) using namespace std; int c[62236 ],n; int lowbit(int x) { return x & -x; } int getsum(int num) { int sum = 0; while(num > 0) { sum += c[num]; num -= lowbit(num); } return sum; } void update(int num) { while(num <= 32000) { c[num] ++; num += lowbit(num); } } int main() { freopen("data5.in","r",stdin); freopen("star.out","w",stdout); scanf("%d",&n); memset(c,0,sizeof(c)); int x,y; F(i,1,n) { scanf("%d%d",&x,&y); printf("%d\n",getsum(x+1)); update(x+1); } return 0; }
相关文章推荐
- JZOJ 4.8 2435——校门外的树【树状数组】
- 【树状数组】数星星(POJ2352 star…
- 2018蓝桥模拟赛·天上的星星 暴力|二维树状数组
- 【树状数组】数星星(POJ2352 star)
- [树状数组]HOJ 10069 星星的等级
- 树状数组的进阶运用(Stars 数星星)
- 树状数组,经典题型数星星
- 【jzoj4877】【力场护盾】【树状数组】
- 1144 数星星 (树状数组)
- hdu-Frosh Week(树状数组)
- 树状数组
- UVa 1513 / UVALive 5902 Movie collection (树状数组)
- 树状数组
- Hdu1556 Color the ball [分块][树状数组]
- 敌兵布阵(树状数组)
- HDU 4000 Fruit Ninja[树状数组]
- POJ 1195 Mobile phones(树状数组)
- 树状数组区间求和三种模型
- LOJ2251 [ZJOI2017] 树状数组【线段树】【树套树】
- hdu 2642 二维树状数组