HDU 1541 树状数组

简介:

题目意思就是说,给你一张star maps,每个star有自己的level,level是这样计算的:(Let the level of a star be an amount of the stars that are not higher and not to the right of the given star.)统计这个star左下角star的个数,就是这个star的level。现在要你总计图中level从0到N-1的star分别有多少个。

如入是按照X Y Y的递增顺序输入的 Y相同时按照X的递增顺序 所以只要求X之前小于等于X的星星的个数就可以了 也就是按照X的值建树 

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 32005
int tree[maxn];
int n;
int ans[15005];
inline int Lowbit(int x)
{
    return x & (-x);
}
inline void Update(int pos, int val)
{
    while (pos <= maxn)
    {
        tree[pos] += val;
        pos += Lowbit(pos);
    }
}
inline int Query(int x)
{
    int sum = 0;
    while (x > 0)
    {
        sum += tree[x];
        x -= Lowbit(x);
    }
    return sum;
}
int main()
{
    int x,y;
    while(~scanf("%d",&n))
    {
        memset(tree,0,sizeof(tree));
        memset(ans,0,sizeof(ans));
        for(int i=0; i<n; i++)
        {
            scanf("%d%d",&x,&y);
            ans[Query(x+1)]++;
            Update(x+1,1);
        }
        for(int i=0; i<n; i++)
            printf("%d\n",ans[i]);
    }
    return 0;
}


 

目录
相关文章
|
4月前
|
算法
lanqiao OJ 1366 spfa最短路
lanqiao OJ 1366 spfa最短路
32 0
|
9月前
|
Java
hdu-2544-最短路(SPFA)
hdu-2544-最短路(SPFA)
41 0
|
人工智能 Java
HDU-敌兵布阵(线段树 || 树状数组)
HDU-敌兵布阵(线段树 || 树状数组)
103 0
|
测试技术
HDU-1232,畅通工程(并查集)
HDU-1232,畅通工程(并查集)
|
算法 C++
HDOJ(HDU) 2109 Fighting for HDU(简单排序比较)
HDOJ(HDU) 2109 Fighting for HDU(简单排序比较)
129 0
|
C++ 人工智能 BI
HDU2032杨辉三角
有点强迫症,主函数必须简洁,但是这里的if判断语句很碍眼,自己也并没有想到什么不画蛇添足的方法使代码更加简洁......
1515 0