poj 2828 Buy Tickets

本文介绍了使用C++实现的二叉树和动态结构树的操作,包括更新节点值和按顺序打印节点值。通过创建树结构、更新节点值和遍历打印节点值来展示算法实现过程。

http://poj.org/problem?id=2828

格式错了几次,以为要空行,坑!!倒过来推。。

View Code
 1 #include<stdio.h>
 2 #define Maxn 200010
 3 int n;
 4 struct jiedian
 5 {
 6     int pos;
 7     int value;
 8 }jie[Maxn];
 9 struct Node
10 {
11     int l,r;
12     int sum;
13     int summ;
14     
15 }node[Maxn*4];
16 int Min(int a,int b)
17 {
18     int c;
19     return c=a>b?b:a;
20 } 
21 void  create_tree(int ll,int rr,int u)
22 {
23     node[u].l=ll;
24     node[u].r=rr;
25     node[u].sum=rr-ll+1;
26     
27     if(ll==rr) return;
28     int mid;
29     mid=(ll+rr)>>1;
30     create_tree(ll,mid,u*2);
31     create_tree(mid+1,rr,u*2+1);
32 }
33 
34 void update(int pos,int zhi,int u)
35 {
36     node[u].sum--;
37     if(node[u].l==node[u].r) 
38     {
39         node[u].summ=zhi;
40         return;
41     }
42     int mid;
43     
44     if(pos<=node[u*2].sum) 
45     {
46         update(pos,zhi,u*2);
47         
48     }
49     else{
50         pos-=node[u*2].sum;
51         update(pos,zhi,u*2+1);
52     }
53     //node[u].sum=Min(node[u*2].sum,node[u*2+1].sum);
54 }
55 void print(int u)
56 {
57     if(node[u].l==node[u].r)
58     {
59         printf("%d",node[u].summ);
60         if(node[u].l!=n) printf(" ");
61         return;
62     }
63     print(u*2);
64     print(u*2+1);
65     
66 }
67 int main()
68 {
69     int x,y;
70     while(~scanf("%d",&n))
71     {
72         create_tree(1,n,1);
73         for(int i=0;i<n;i++)
74         {
75             scanf("%d%d",&jie[i].pos,&jie[i].value);
76             
77         }
78         for(int i=n-1;i>=0;i--)
79         update(jie[i].pos+1,jie[i].value,1);
80         print(1);
81         printf("\n");
82     }
83 }

 

 

转载于:https://www.cnblogs.com/1114250779boke/archive/2012/08/29/2661774.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值