HDU_1541 Stars 【树状数组】
2018-03-04 10:34
357 查看
题目链接
题意已说明输入的的时候是按Y坐标从小到大排序的,然后可以用一个数组来根据横坐标的大小来记录这个点的星星的的等级。
首先每次读入一个星星的位置后,在它属于的等级的个数+1,然后要更新它之后的横坐标的等级。
题目描述
有N个星星,给出N个星星的坐标,但是坐标给出的顺序有一定的规律,按照y坐标从小到大给出,当y坐标相同的时候按照x坐标的大小顺序给出;之后输出处在各个等级的星星的个数,等级就是看y坐标和x坐标同时小于等于这个星星的个数之和。解题思路
这道题的难点在于如何用树状数组来存各个坐标星星的等级。题意已说明输入的的时候是按Y坐标从小到大排序的,然后可以用一个数组来根据横坐标的大小来记录这个点的星星的的等级。
首先每次读入一个星星的位置后,在它属于的等级的个数+1,然后要更新它之后的横坐标的等级。
代码部分
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; const int maxn = 32002; int level[maxn]; int a[maxn]; int lowbit(int x) { return x & (-x); } void add(int i, int j) { while(i <= maxn) { a[i] += j; i += lowbit(i); } } int sum(int i) { int s = 0; while(i > 0) { s += a[i]; 4000 i -= lowbit(i); } return s; } int main() { int n; while(cin >> n) { memset(a, 0, sizeof(a)); memset(level, 0, sizeof(level)); int x, y; for(int i = 1; i <= n; ++ i) { scanf("%d%d", &x, &y); x ++; level[sum(x)] ++; add(x, 1); } for(int i = 0; i < n; ++ i) { printf("%d\n", level[i]); } } return 0; }
相关文章推荐
- hdu1541 Stars(树状数组+解释)
- 树状数组题目---HDU 1541 stars 及其变形(降维思想)
- hdu 1541 Stars(树状数组,思路)
- 树状数组 POJ 2352 HDU 1541 Stars
- hdu 1541 Stars(树状数组)
- HDU:1541 Stars(树状数组)
- hdu 1541(树状数组入门题 Stars)
- 【HDU - 1541 - Stars 【 区间求和 单点更新 ==树状数组】
- HDU 1541 Stars(树状数组入门应用)
- poj-2352 && HDU-1541 --Stars(树状数组)
- hdu 1541/poj 2352:Stars(树状数组,经典题)
- HDU 1541 Stars(树状数组||线段树)
- HDU-1541 Stars 树状数组
- 【树状数组】hdu 1541 Stars
- HDU 1541 Stars (树状数组)
- 【HDU 1541】Stars(树状数组)
- hdu 1541 Stars(树状数组)
- HDU 1541 Stars 树状数组
- 【HDU 1541 Stars 树状数组】
- HDU 1541 Stars (树状数组)