POJ 2352 stars【树状数组】解题报告
2013-04-12 13:44
260 查看
关于树状数组,请点这里:/article/11429318.html
题目大意:
给你星星的坐标(y递增,若y相等,x递增),每个星星都有一个等级,规定它的等级就是在它左下方的星星的个数。输入所有星星后,依次输出等级为0到n-1的星星的个数。
输入的每一个星星的y坐标都是递增的,如果y相同则按x递增排序。
解题思路:
因为这道题的输入数据是按y坐标递增的,所以前一个坐标肯定不会包含后一个坐标,那么这样y的作用就可以忽略不计了,那么这题就相当于求a
前面小于a
值的个数
采用统计一次,更新一次的方法,可以避免后面的点的x坐标对当前计算的影响
Ps:不能用cin,cout,因为数据量太大,还有树状数组的下标是从1开始,最后如果在hdu上交题,请注意hdu是多例,pku是单例!!!
代码如下:
题目大意:
给你星星的坐标(y递增,若y相等,x递增),每个星星都有一个等级,规定它的等级就是在它左下方的星星的个数。输入所有星星后,依次输出等级为0到n-1的星星的个数。
输入的每一个星星的y坐标都是递增的,如果y相同则按x递增排序。
解题思路:
因为这道题的输入数据是按y坐标递增的,所以前一个坐标肯定不会包含后一个坐标,那么这样y的作用就可以忽略不计了,那么这题就相当于求a
前面小于a
值的个数
采用统计一次,更新一次的方法,可以避免后面的点的x坐标对当前计算的影响
Ps:不能用cin,cout,因为数据量太大,还有树状数组的下标是从1开始,最后如果在hdu上交题,请注意hdu是多例,pku是单例!!!
代码如下:
/* poj 2352 stars solution:树状数组 */ #include <cstdio> #include <cstring> using namespace std; const int MAXN = 32010; int n,c[MAXN],level[MAXN]; int lowbit(int x) { return x&(-x); } void update(int i,int v) { while(i<MAXN) { c[i]+=v; i+=lowbit(i); } } int getSum(int i) { int sum=0; while(i>0) { sum+=c[i]; i-=lowbit(i); } return sum; } int main() { int x,y; scanf("%d",&n); memset(c,0,sizeof(c)),memset(level,0,sizeof(level)); for (int i = 0; i < n; ++i) { scanf("%d %d",&x,&y); //注意树状数组的下标是从1开始的,所以要x+1 ++level[getSum(x+1)]; update(x+1,1); } for (int i = 0; i < n; ++i) { printf("%d\n",level[i]); } return 0; }
相关文章推荐
- POJ - 2352 Stars解题报告(树状数组求二维区域和)
- 【原】 POJ 2352 Stars 树状数组 解题报告
- 【原】 POJ 1195 Mobile phones 2D树状数组 解题报告
- [poj 2352]Stars代码阅读记录[树状数组]
- poj 2352 Stars(树状数组)
- poj-2352-Stars【树状数组】
- POJ 2352 Stars (线段树&&树状数组)
- POJ 2352 Stars 【树状数组】
- POJ2352 Stars(树状数组 or SplayTree)
- poj 2352 Stars(树状数组)
- poj 2352_Stars_树状数组
- 树状数组 离散化 求逆序数POJ 2299Ultra-QuickSort解题报告
- POJ 2352 Stars 【树状数组】
- POJ 2352 Stars(树状数组)
- POJ 2352 Stars 【树状数组】
- poj2352 Stars(树状数组)
- poj 2352 OR hdu 1541 Stars(数据结构:树状数组)
- hdu 1541/poj 2352:Stars(树状数组,经典题)
- POJ 2352 Stars(树状数组)
- POJ - 2352 Stars(树状数组)