现在的位置: 首页 > 综合 > 正文

【ACM】poj 2828

2013年12月13日 ⁄ 综合 ⁄ 共 714字 ⁄ 字号 评论关闭
#include <cstdlib>
#include <cstdio>
#include <iostream>
using namespace std;


#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1


const int maxn = 222222;
int sum[maxn << 2];
int id;


void build(int l, int r, int rt)
{
sum[rt] = r - l + 1;
if(l == r)
return;
int m = (l + r) >> 1;
build(lson);
build(rson); 
}


//线段树搜索的时候是按照节点的顺序搜索,故具有先后顺序 
void update(int p, int l, int r, int rt)
{
sum[rt]--;
int m = (l + r) >> 1;
if(l == r)
{ 
//定义一个全局变量来保存返回的位置 
id = l;
return;
}
if(p <= sum[rt << 1])
update(p, lson);
else
update(p - sum[rt << 1], rson);
}


int a[maxn];
int b[maxn];
int ans[maxn];


int main()
{
int n;
while(~scanf("%d", &n))
{
build(1, n, 1);
for(int i = 0; i < n; i++)
scanf("%d %d", &a[i], &b[i]);
for(int i = n - 1; i >= 0; i--)
{
update(a[i] + 1, 1, n, 1) ;
ans[id] = b[i];
}
for(int i = 1; i < n; i++)
printf("%d ", ans[i]);
printf("%d\n", ans[n]);
}
system("pause");
return 0; 
}

抱歉!评论已关闭.