POJ - 2828 - Buy Tickets (线段树)
来源:互联网 发布:java图形程序设计 编辑:程序博客网 时间:2024/06/06 20:23
题目传送:Buy Tickets
思路:线段树,从后往前依次插入,插入一个更新一次
AC代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>#include <queue>#include <stack>#include <vector>#include <map>#include <set>#include <deque>#include <cctype>#define LL long long#define INF 0x7fffffffusing namespace std;const int maxn = 200005;struct node {int pos, v;}a[maxn];int x[maxn << 2], num[maxn];void build(int l, int r, int rt) {x[rt] = r - l + 1;if(r == l) return;int mid = (r + l) >> 1;build(l, mid, rt << 1);build(mid + 1, r, rt << 1 | 1);}int query(int p, int l, int r, int rt) {x[rt] --;if(l == r) return l;int mid = (l + r) >> 1;if(x[rt << 1] >= p) return query(p, l, mid, rt << 1);else return query(p - x[rt << 1], mid + 1, r, rt << 1 | 1);}int main() {int n;while(scanf("%d", &n) != EOF) {for(int i = 1; i <= n; i ++) {scanf("%d %d", &a[i].pos, &a[i].v);}build(1, n, 1);for(int i = n; i >= 1; i --) {int p = query(a[i].pos + 1, 1, n, 1);num[p] = a[i].v;}for(int i = 1; i < n; i ++) {printf("%d ", num[i]);}printf("%d\n", num[n]);}return 0;}
0 1
- 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(线段树)
- e5-5uva12096
- Restful 406 Not Acceptable
- POJ - 3484 Showstopper 二分搜索
- POJ 3468 线段树
- 如何将文章带格式的存入数据库,并带格式的输出以及数据库经常插入空行问题
- POJ - 2828 - Buy Tickets (线段树)
- leetcode:Implement Trie (Prefix Tree)
- php常用无限级分类
- Populate Next Right Pointer in Each Node
- URAL 1855 区间更新线段树
- QWT6.1.2安装使用 Win8 64位 Qt5.3.1_MSVC2013
- STL之complex
- ZOJ 3299 线段树
- 欢迎使用CSDN-markdown编辑器