题目链接:http://poj.org/problem?id=2828

类似的题目:http://www.cnblogs.com/lovychen/p/3674048.html

测试数据:

in:

4
0 77
1 51
1 33
2 69
4
0 20523
1 19243
1 3890
0 31492

out:

77 33 69 51
31492 20523 3890 19243

题目分析:直接倒着进行插入,然后按照从前向后寻找空位进行插入:

【题解】:

    线段树节点中保存这一段中的空位数,然后倒序对pos插入:

    例如:  0 77
         1 51
         1 33
         2 69

    先取: 2 69  ——  ——  —69—   ——   (需要前面有3个空位才能插入)

然后取: 1 33   ——   —33—    —69—    ——   (需要前面有2个空位才能插入)

然后取: 1 51   ——   —33—    —69—    —51—   (需要前面有2个空位才能插入)  前面只有1个空位  故插入后面空格

   然后取: 0 77   —77—   —33—    —69—    —51—   (需要前面有1个空位才能插入)

AC代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<queue>
 6 #include<string>
 7 #include<cmath>
 8 using namespace std;
 9 const int N = 200010;
10 int T,tot;
11 int pre[N],vis[N];
12 struct TT
13 {
14     int x,y;
15 }a[N];
16 int lowbit(int x)
17 {
18     return x&(-x);
19 }
20 void init()
21 {
22     for(int i=1;i<=T;i++)
23       vis[i] =lowbit(i);
24 }
25 int sum(int x)
26 {
27     int ans = 0;
28     while(x>0)
29     {
30         ans = ans+vis[x];
31         x = x-lowbit(x);
32     }
33     return ans;
34 }
35 int update(int x)
36 {
37     while(x<=T)
38     {
39         vis[x] = vis[x] - 1;
40         x = x +lowbit(x);
41     }
42 }
43 void add(int x,int y)
44 {
45     int l=1,r=T,mid;
46     while(l<r)
47     {
48         //printf("l === %d %d %d\n",l,r,mid);
49         mid = (l+r)/2;
50         if(sum(mid)>=x) r = mid;
51         else l = mid+1;
52     }
53     //printf("l = %d\n",l);
54     update(l);
55     pre[l] = y;
56 }
57 int main()
58 {
59 int aa,bb;
60   while(~scanf("%d",&T))
61   {
62       init();
63       for(int i=1;i<=T;i++)
64       {
65         scanf("%d %d",&aa,&bb);
66         a[i].x = aa+1;
67         a[i].y = bb;
68       }
69       for(int i=T;i>0;i--)
70           add(a[i].x,a[i].y);
71       for(int i=1;i<=T;i++)
72       {
73             if(i==1) printf("%d",pre[i]);
74             else printf(" %d",pre[i]);
75       }
76       printf("\n");
77   }
78   return 0;
79 }

poj Buy Tickets相关推荐

  1. 【POJ】2828 Buy Tickets(线段树+特殊的技巧/splay)

    http://poj.org/problem?id=2828 一开始敲了个splay,直接模拟. tle了.. 常数太大.. 好吧,说是用线段树.. 而且思想很拽.. (貌似很久以前写过貌似的,,) ...

  2. poj 2828 Buy Tickets

    http://poj.org/problem?id=2828 题意:在一个队列里,有人依次向第pos个位置插入,求最后的序列: 思路:用线段树存储区间内剩余的没有被占的位置,注意插入的时候要从后向前插 ...

  3. POJ 2828 Buy Tickets 线段树

    题目: http://poj.org/problem?id=2828 很巧妙的题,逆序插入线段树,这样元素不用移动.用二叉排序树也能过. 1 #include <stdio.h> 2 #i ...

  4. POJ 2828. Buy Tickets

    链接 http://poj.org/problem?id=2828 题意 有 NNN 个人排队,每一个人都有一个权值 valvalval ,每一个人都会按顺序插入到当前队伍的某一个位置 posposp ...

  5. POJ 2828 Buy Tickets | 线段树的喵用

    题意: 给你n次插队操作,每次两个数,pos,w,意为在pos后插入一个权值为w的数; 最后输出1~n的权值 题解: 首先可以发现,最后一次插入的位置是准确的位置 所以这个就变成了若干个子问题, 所以 ...

  6. Buy Tickets(poj 2828)

    题意:排队买票,但是 中途 出现插队情况,比如 0 123,代表值为123的人 插入到 0 的位置,如果后面 出现 0 456,那么新的 0的位置就是 456,123就变成是 1的位置了 分析:这道题 ...

  7. POJ - 2828 Buy Tickets(线段树+思维/Splay+模拟)

    题目链接:点击查看 题目大意:给出n个人,一个队列,一开始队列是空的,每个人加入的时候都会插入到指定位置pos的后面,即插队,问最后队列的排列情况是怎么样的 题目分析:一开始很难想到是线段树的题目,毕 ...

  8. #树状数组#poj 2828 Buy Tickets

    题目 输入插队的人和插队的位置,求最终所有人的位置. 分析 树状数组,从后往前(倒推),然后就是要让在前面的次序-1. 代码 #include <cstdio> #include < ...

  9. POJ 2828Buy Tickets

    POJ 2828 题目大意是说有n个插入操作,每次把B插入到位置A,原来A以后的全部往后移动1,球最后的序列 tree里保存的应该是这整个区间还有多扫个位置可以插入数据,那么线段树里从后往前扫描依次插 ...

最新文章

  1. 题目:[NOIP2008]笨小猴
  2. python手机端编程环境_移动端自动化测试解决方案(Appium + Python) - (1) 环境搭建...
  3. vagrant boxes
  4. Tomcat启动报错整理
  5. iOS 本地化应用程序汇总 国际化
  6. Google浏览器截长图 不需要借助任何插件!!!
  7. 【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-6 迪米特原则(最少知道原则)...
  8. ICCV 2019 | 微软开源无监督学习的医学图像配准方法:递归级联网络
  9. VoltDB培训PPT一则
  10. select选中值传递到后台action中
  11. 还在苦恼如何查看微信共同好友吗?用Python轻松搞定
  12. MATLAB平台文字识别算法实现
  13. oBlog 4.0 正式版 2006-09-06
  14. 今日头条安卓_考察今日头条总部—字节跳动
  15. 测试自己移动速度的软件,Superspeed一键测速脚本 测试服务器到国内电信/联通/移动速度...
  16. 51、【网工必备】两种常见网络拓扑图介绍,一看就会
  17. 轻轻松松做演讲的小窍门
  18. 虚拟化服务器内核数有哪几种,Vmware核心处理器及内核数量相关概念
  19. 光纤收发器工作原理及技术详解
  20. java一维数组正序输出,java将一个数组逆序输出-java将一个数组逆序输出的方法-吾爱编程网...

热门文章

  1. python 斐波那契数列
  2. git 撤销刚才的rebase_git rebase 的使用 (用于撤销某次commit)
  3. 随机过程:高斯函数导数、梯度
  4. 语音识别1: 音频信号采集、并存入 wav文件
  5. GraphViz:2 DOT语法和相关应用
  6. java 数组 包含_Java中高效的判断数组中某个元素是否存在详解
  7. select2 ajax demo,Select2下拉框示例
  8. @cacheable 是否缓存成功_DNS缓存中毒攻击
  9. linux ls只显示文件名或者文件夹名
  10. springmvc如何使用视图解析器_SpringMVC的工作原理