3146020_tle.cpp
来自「北大大牛代码 1240道题的原代码 超级权威」· C++ 代码 · 共 89 行
CPP
89 行
#include <stdio.h>
#include <stdlib.h>
#define INIT (Node *)malloc(sizeof(Node))
typedef struct node
{
int L, R;
int ll, rr;
struct node *l, *r;
}Node;
Node *root;
Node *creat_seg_tree(Node *s,int l,int r)
{
int mid;
Node *p, *q;
mid = (l+r)/2;
s->L = l,s->R = r;
if(l==r)
{
s->ll = s->rr = -1;
s->l = NULL;
s->r = NULL;
return s;
}
p = INIT,q = INIT;
s->ll = mid-l+1;
s->rr = r-mid;
s->l = creat_seg_tree(p,l,mid);
s->r = creat_seg_tree(q,mid+1,r);
return s;
}
int n;
int val[200001], pos[200001];
int ans[200001];
int find(Node *t,int num)
{
if(t->L==t->R)
return t->L;
if(t->ll >= num)
{
t->ll--;
return find(t->l,num);
}
else
{
t->rr--;
return find(t->r,num-t->ll);
}
}
void del(Node *t)
{
if(t->l)
del(t->l);
if(t->r)
del(t->r);
delete(t);
}
int main()
{
int i;
while(scanf("%d",&n)==1)
{
root = INIT;
creat_seg_tree(root,0,n-1);
for(i = 0; i < n; i++)
{
scanf("%d%d",&pos[i],&val[i]);
}
for(i = n-1; i >= 0; i--)
{
ans[find(root,pos[i]+1)] = val[i];
}
for(i = 0; i < n; i++)
{
printf("%d ",ans[i]);
}
printf("\n");
del(root);
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?