您的位置:首页 > 其它

POJ_2481_树状数组

2010-06-13 12:29 302 查看
//============================================================================
// Name : POJ_2481.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : 树状数组都快忘光了 1924K 1157MS C++; 2640K 2391MS G++
//============================================================================

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string.h>

using namespace std;
struct interval
{
int x,y;
int id;
}s[100005];
int c[100005];
int ans[100005];
int maxx;
bool cmp(interval a,interval b)
{
if(a.y == b.y)
return a.x < b.x;
return a.y> b.y;
}

int lowbits(int x)
{
return x&(-x);
}
void add(int n )
{

while(n < maxx)
{
c
++;
n = n+lowbits(n);
}

}
int sums(int n)
{
int sum = 0;
while(n > 0)
{
sum += c
;
n = n-lowbits(n);
}
return sum;
}
int main() {
freopen("in","r",stdin);
int n;
int i;
while(scanf("%d",&n) && n)
{

maxx = -1;
for(i = 0; i < n; i++)
{
scanf("%d %d",&(s[i].x),&(s[i].y));
s[i].id = i;
if(s[i].x > maxx)
maxx = s[i].x;
}
maxx +=2;
for(i = 0 ; i <= maxx; i++)
c[i] = 0;

sort(s,s+n,cmp);
add(s[0].x + 1);
ans[s[0].id] = 0;
for(i = 1; i < n; i++)
{
if(s[i].x == s[i-1].x && s[i].y == s[i-1].y)
{
ans[s[i].id] = ans[s[i-1].id];
}else
{
ans[s[i].id] = sums(s[i].x + 1);
}
add(s[i].x + 1);
}
for(i = 0; i < n-1;i++)
{
printf("%d ",ans[i]);
}
printf("%d/n",ans[i]);

}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: