symons

___________每一天都是幸福的!!

  博客园  ::  :: 新随笔  ::  :: 订阅 订阅  :: 管理

   知道了这个解法,让我很兴奋。

   好,多余的话不说,上代码。

 1 #include <stdio.h>
 2 #define lson l,m,rt<<1
 3 #define rson m+1,r,rt<<1|1
 4 #define maxn 222222
 5 int val[maxn],sum[maxn<<2],pos[maxn],res[maxn];
 6 int id;
 7 void build(int l,int r,int rt)
 8 {
 9     sum[rt]=r-l+1;
10     if(l==r)
11         return;
12     int m=(l+r)>>1;
13     build(lson);
14     build(rson);
15 }
16 void update(int p,int l,int r,int rt)
17 {
18     sum[rt]--;
19     if(l==r)
20     {
21         id=l;
22         return;
23     }
24     int m=(l+r)>>1;
25     if(sum[rt<<1]>=p)
26         update(p,lson);
27     else
28     {
29         p-=sum[rt<<1];
30         update(p,rson);
31     }
32 }
33 int main()
34 {
35     int n;
36     int i;
37     while(~scanf("%d",&n))
38     {
39         build(1,n,1);
40         for(i=0;i<n;++i)
41         {
42             scanf("%d%d",&pos[i],&val[i]);
43         }
44         for(i=n-1;i>=0;--i)
45         {
46             update(pos[i]+1,1,n,1);
47             res[id]=val[i];
48         }
49         for(i=1;i<=n;++i)
50         {
51             if(i==1)
52                 printf("%d",res[i]);
53             else
54                 printf(" %d",res[i]);
55         }
56         printf("\n");
57     }
58     return 0;
59 }

 

posted on 2013-01-11 11:32  symons  阅读(152)  评论(0)    收藏  举报