📄 pku2828.cpp
字号:
#include <stdio.h>
#include <string.h>
#define size 200010
typedef struct Node
{
int l, r, cnt;
} Node;
Node tree[size * 4];
int ans[size];
int pos[size], id[size];
int N;
void CreateSegmentTree(int s, int e, int p)
{
int mid;
tree[p].l = s;
tree[p].r = e;
tree[p].cnt = e - s;
if (e - s == 1)
return;
mid = (s + e) >> 1;
CreateSegmentTree(s, mid, (p << 1) + 1);
CreateSegmentTree(mid, e, (p << 1) + 2);
}
void Set(int q, int ID, int p)
{
tree[p].cnt--;
if (tree[p].r - tree[p].l == 1)
{
ans[tree[p].l] = ID;
return;
}
if (q < tree[(p << 1) + 1].cnt)
{
Set(q, ID, (p << 1) + 1);
}
else
{
Set(q - tree[(p << 1) + 1].cnt, ID, (p << 1) + 2);
}
}
void Solve()
{
int i;
memset(ans, 0, sizeof(ans));
CreateSegmentTree(0, N, 0);
for (i = 0; i < N; i++)
{
scanf("%d %d", &pos[i], &id[i]);
}
for (i = N - 1; i >= 0; i--)
{
Set(pos[i], id[i], 0);
}
for (i = 0; i < N; i++)
{
printf("%d ", ans[i]);
}
printf("\n");
}
int main()
{
int i;
while (EOF != scanf("%d", &N))
Solve();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -