POJ 2828 Buy Tickets
来源:互联网 发布:理光复印机网络打印 编辑:程序博客网 时间:2024/05/24 07:01
题目链接:POJ 2828 Buy Tickets
线段树。
看了人家的思路。
每个节点代表着这个节点下还有多少个空位,然后倒序插入,这样每个点插入的位置就是最终的位置。
#include <iostream>#include <stdio.h>using namespace std;const int MAX_N = 200000 + 100;struct Node{ int l,r,remain;};int arr[MAX_N],p[MAX_N],val[MAX_N];Node node[MAX_N << 2];int n;void build(int i,int l,int r){ node[i].l = l; node[i].r = r; node[i].remain = r - l + 1; if(l == r) return; int mid = (l + r) >> 1; build(i << 1,l,mid); build(i << 1 | 1,mid + 1,r);}int _insert(int i,int pos){ node[i].remain--; if(node[i].l == node[i].r) return node[i].l; if(node[i << 1].remain >= pos) _insert(i << 1,pos); else _insert(i << 1 | 1,pos - node[i << 1].remain);}int main(){ while(scanf("%d",&n) != EOF) { build(1,1,n); for(int i = 1;i <= n;i++) scanf("%d %d",&p[i],&val[i]); for(int i = n;i > 0;i--) { int _pos = _insert(1,p[i] + 1); arr[_pos] = val[i]; } printf("%d",arr[1]); for(int i = 2;i <= n;i++) printf(" %d",arr[i]); printf("\n"); } return 0;}
0 0
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- POJ 2828 Buy Tickets
- Poj 2828 Buy Tickets
- poj 2828 buy tickets
- POJ 2828 Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- POJ 2828 - Buy Tickets
- POJ 2828 - Buy Tickets
- POJ-2828-Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- POJ 2828 Buy Tickets
- POJ 2828 Buy Tickets
- poj3278 Catch That Cow
- TOJ 1536
- hdu4118
- css+div 图片排列布局
- HDU 1395(快速幂模板)
- POJ 2828 Buy Tickets
- 经典c程序(0004)---输入三个整数x,y,z,请把这三个数由小到大输出。
- Oracle PCTFREE PCTUSED FREELIST讲解
- 快速排序中交换两个数时,不使用辅助变量的bug. 陷阱
- CCLabelTTF和CCLabelAtlas区别(三种文字类的区别)
- NYOJ 20 吝啬的国度
- 贪心算法- 杭电OJ 1009 FatMouse' Trade
- ROS机器人小车素材
- UNIX Network Programming笔记之第二章