1 #include<cstdio>
 2 #define MAXN 200010
 3 int tree[MAXN<<2],pos[MAXN],val[MAXN],ans[MAXN];
 4 void Build(int L,int R,int rt)
 5 {
 6     tree[rt]=R-L+1;
 7     if(L!=R)
 8     {
 9         int mid=(L+R)>>1;
10         Build(L,mid,rt<<1);
11         Build(mid+1,R,rt<<1|1);
12     }
13 }
14 int Update(int x,int L,int R,int rt)
15 {
16     tree[rt]--;
17     if(L==R)
18         return L;
19     int mid=(L+R)>>1;
20     if(tree[rt<<1]>=x)
21         return Update(x,L,mid,rt<<1);
22     else
23     {
24         x-=tree[rt<<1];
25         return Update(x,mid+1,R,rt<<1|1);
26     }
27 }
28 int main()
29 {
30     int n,i,k;
31     while(~scanf("%d",&n))
32     {
33         Build(1,n,1);
34         for(i=1;i<=n;i++)
35             scanf("%d%d",&pos[i],&val[i]);
36         for(i=n;i;i--)
37         {
38             k=Update(pos[i]+1,1,n,1);
39             ans[k]=val[i];
40         }
41         for(i=1;i<n;i++)
42             printf("%d ",ans[i]);
43         printf("%d\n",ans[i]);
44     }
45     return 0;
46 }

相关文章:

  • 2022-12-23
  • 2022-01-17
  • 2021-11-22
  • 2022-12-23
猜你喜欢
  • 2021-10-23
  • 2022-02-14
  • 2022-01-26
  • 2021-05-23
  • 2021-08-22
  • 2022-03-08
  • 2021-11-11
相关资源
相似解决方案