Ural 1028 Stars(树状数组)

题目地址:http://acm.timus.ru/problem.aspx?space=1&num=1028

思路:

首先按坐标排序(先按x,后按y),按x从小到大依次处理,则点i下方的点的个数即为y坐标不大于改点的个数,使用树状数组维护即可。

#include
#include
#include
#include
using namespace std;
const int maxn=15000+50;

struct Node
{
    int x,y;
};

int n;
int c[maxn];
Node a[maxn];
int b[maxn],ans[maxn];

int cmp(Node a,Node b)
{
    if(a.x==b.x) return a.y0)
    {
        tot+=c[x];
        x-=lowbit(x);
    }
    return tot;
}

void add(int x,int num)
{
    while(x<=n)
    {
        c[x]+=num;
        x+=lowbit(x);
    }
}

int main()
{
    scanf("%d",&n);
    for(int i=0; i


你可能感兴趣的:(OJ_URAL,数据结构_树状数组,ACM)