链接:https://vjudge.net/problem/POJ-2828#author=0

题意:

有N个人排队,每一个人都有一个val来对应,每一个后来人都会插入当前队伍的某一个位置pos。要求把队伍最后的状态输出。

思路:

刚开始想不到线段树,看了题解之后还是有点懵。

就是线段树的单点更新。

代码:

#include <iostream>
#include <memory.h>
#include <string>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
#include <queue>
#include <math.h>
#include <cstdio>
using namespace std;typedef long long LL;
const int MAXN = 2e5 + 10;int segment[MAXN*4];
int a[MAXN], b[MAXN];
int res[MAXN];void Push_up(int root)
{segment[root] = segment[root<<1] + segment[root<<1|1];
}void Build(int root, int l, int r)
{if (l == r){segment[root] = 1;return;}int mid = (l+r)/2;Build(root<<1, l, mid);Build(root<<1|1, mid+1, r);Push_up(root);
}void Update(int root, int l, int r, int pos, int val)
{if (l == r){res[l] = val;segment[root] = 0;return;}int mid = (l+r)/2;if (segment[root<<1] >= pos)Update(root<<1, l, mid, pos, val);elseUpdate(root<<1|1, mid+1, r, pos-segment[root<<1], val);Push_up(root);
}int main()
{int n;while (~scanf("%d", &n)){Build(1, 1, n);for (int i = 1;i <= n;i++)scanf("%d%d", &a[i], &b[i]);for (int i = n;i >= 1;i--)Update(1, 1, n, a[i]+1, b[i]);for (int i = 1;i <= n;i++)cout << res[i] << ' ' ;cout << endl;}return 0;
}

转载于:https://www.cnblogs.com/YDDDD/p/10676528.html

POJ-2828-Buy Tickets相关推荐

  1. poj 2828 Buy Tickets

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

  2. POJ 2828 Buy Tickets 线段树

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

  3. POJ 2828. Buy Tickets

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

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

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

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

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

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

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

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

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

  8. Buy Tickets(poj 2828)

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

  9. poj Buy Tickets

    题目链接:http://poj.org/problem?id=2828 类似的题目:http://www.cnblogs.com/lovychen/p/3674048.html 测试数据: in: 4 ...

  10. POJ2828 Buy Tickets【线段树,逆序遍历】

    刚开始看到题目,想用memmove偷懒,结果TLE,后来查了查,才发现用memmove也是O(n^2)的复杂度... #include <stdio.h> #include <str ...

最新文章

  1. cgo linux arm,Golang交叉编译各个平台的二进制文件
  2. python学习笔记04 --------------基本运算符
  3. Spring配置汇总
  4. android vcard解析代码,Android使用vcard文件的方法简单实例
  5. 休眠事实:有利于双向集vs列表
  6. XML 命名空间(XML Namespaces)
  7. 在SharePoint 2010中创建网站的权限级别
  8. L2C中Lustre语义的环境定义
  9. 华为P30系列再曝光:屏幕参数揭晓 还要用水滴全面屏?
  10. mysql 代替分号_php – mysql FIND_IN_SET()用分号代替逗号
  11. 用lstm模型做预测_深度学习模型 CNN+LSTM 预测收盘价
  12. 管理感悟:复制代码是错误行为
  13. 中年男人失业,滴滴,外卖,保安三选一,怎么选?
  14. 量化交易之vn.py篇 - 同步持仓发单逻辑(非净头寸 净头寸)
  15. [2017集训队作业自选题#149]小c的岛屿
  16. Java设计模式----------享元模式
  17. 谷歌浏览器,无需安装
  18. Abnova ProteoScreen - 组织微阵列抗体详解
  19. android手机桌面怎么调,安卓手机如何修改手机桌面上的CMCC
  20. 音频拼接python

热门文章

  1. Android 让View 和 ViewGroup 同时响应点击或者长按事件
  2. C++写#pragma warning(disable 4786)的作用
  3. android中实现view的更新有两组方法
  4. 高职高考难度大吗_成人高考与普通高考区别成人高考和高考的难度一样吗
  5. C语言函数集(十八)
  6. 打开Eclipse时出现Failed to create the Java Virtual Machine
  7. iOS架构-静态库.a的脚本化打包及使用(3)
  8. centos7安装python3.7.4_阿里云centos7.4安装python3.7.0
  9. 软工实践第四次作业——团队展示
  10. Ubuntu mysql数据库导入sql文件