Buy Tickets POJ - 2828 思维+线段树

题意

是说有n个人买票,但是呢这n个人都会去插队,问最后的队列是什么情况。插队的输入是两个数,第一个是前面有多少人,第二个是这个人的编号,最后输出编号就好了。

解题思路

这个题要倒着处理,因为最后一个人插队完成后,别人就不能影响他了。他前面有n个人,那么他就是n+1号位置上,这样来的话,我们只需要知道那个位置,他前面有n个人就行。默认每个位置都没有人。

详细看代码。

代码实现

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid ( (t[rt].l+t[rt].r)>>1 )
using namespace std;
const int maxn=2e5+7;
struct node{int l, r;int sum, val;//sum记录这个区间内有多少空位置,val记录这个人的编号
}t[maxn<<2];
struct note{//记录这n个人的插队的顺序int pos, val;
}a[maxn];
int n;
void up(int rt)
{t[rt].sum=t[ls].sum+t[rs].sum;
}
void build(int rt, int l, int r)
{t[rt].l=l;t[rt].r=r;t[rt].sum=r-l+1;if(l==r) return ;build(ls, l, mid);build(rs, mid+1, r);
}
void update(int rt, int pos, int val)
{if(t[rt].l==t[rt].r){t[rt].sum--;t[rt].val=val;return ;}if(t[ls].sum>=pos)update(ls, pos, val);else update(rs, pos-t[ls].sum, val);up(rt);
}
void query(int rt)
{if(t[rt].l==t[rt].r){printf("%d ", t[rt].val);return ;}query(ls);query(rs);
}
int main()
{while(scanf("%d", &n)!=EOF){for(int i=1; i<=n; i++){scanf("%d%d", &a[i].pos, &a[i].val);}build(1, 1, n);for(int i=n; i>=1; i--){update(1, a[i].pos+1, a[i].val);}query(1);printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/alking1001/p/11423289.html

Buy Tickets POJ - 2828 思维+线段树相关推荐

  1. Buy Tickets(poj 2828)

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

  2. POJ 2352 Stars (线段树)

    POJ 2352 Stars (线段树) 手动博客搬家:本文发表于20170819 22:11:49, 原地址https://blog.csdn.net/suncongbo/article/detai ...

  3. P2787 语文1(chin1)- 理理思维(线段树)

    P2787 语文1(chin1)- 理理思维(线段树) 对每个字母开一棵线段树 操作1就是区间查询 操作2就是区间修改 操作3可以看成 先预处理查询出区间对应的每个字母的个数,然后进行区间修改. 然后 ...

  4. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★

    poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...

  5. poj 2352 Stars(线段树)

    题目:http://poj.org/problem?id=2352 大意:一些星星有自己的优先级,优先级是x坐标和y坐标小于等于该星星坐标的星星个数 思路:由于这个题的y值是从小到大排列,所以对x建立 ...

  6. POJ 2299 Ultra-QuickSort(线段树+离散化)

    题目地址:POJ 2299 这题以前用归并排序做过.线段树加上离散化也能够做.一般线段树的话会超时. 这题的数字最大到10^10次方,显然太大,可是能够利用下标,下标总共仅仅有50w.能够从数字大的開 ...

  7. poj 2528 离散化+线段树 hdu 1698 线段树 线段树题目类型一:染色计数 外加离散化

    第一次听到离散化是今年省赛的时候,一道矩形并的题,很水,就两个矩形... 今天再去做线段树已经发现离散化忘得差不多了...水逼的悲哀啊... 先看简单点的hdu 1698 http://acm.hdu ...

  8. poj pku 2528 线段树的基础应用

    郁闷了一上午的题目,一直都是WA,找了老半天错,想了很多测试数据还是WA.就连骑单车回家的路上还在想这题.悲剧呀... 做完这个题目才明白线段树不同于其他算法,它只是一种思想,在实际应用中是要根据题意 ...

  9. poj 1151(线段树求面积并)

    解题思路:线段树求面积并,水题 #include<iostream> #include<cstdio> #include<cstring> #include< ...

  10. POJ - 2352 Stars(线段树/树状数组)

    题目链接:点击查看 题目大意:给出n个星星的坐标,规定每个星星的等级为在它左下方的星星的个数,输出0~n-1每个等级共有多少个星星 题目分析:裸的线段树,因为x坐标和y坐标都已经给排好序了,是按照y升 ...

最新文章

  1. 【Redis】16.Redis哨兵
  2. ubuntu自定义安装里怎么选_中央空调到底应该怎么选?小户型也能安装中央空调?行家说实话了...
  3. 倩女幽魂服务器维护时间,9月5日在线维护公告
  4. 动态切换数据源(spring+hibernate)
  5. Git学习(4)基本操作
  6. (转)PowerDesigner教程系列(二)概念数据模型
  7. Python花式编程:6种方法计算1!+2!+...+n!
  8. mysql客户端不支持_MySQL 8.0 - 客户端不支持服务器请求的身份验证协议; 考虑升级MySQL客户端...
  9. [转载] 杜拉拉升职记——34 设定工作目标要符合“SMART”原则
  10. python常用代码大全-大神整理的python资源大全
  11. Function的常用属性和方法
  12. nginx的web基础
  13. 整数规划 Integer Programming 是什么
  14. Docker学习之docker常用命令
  15. 阿里云播放器Aliplayer-WEB走坑中
  16. 基于SSM实现宠物领养网站平台管理系统
  17. 解析博图数据块(昆仑通态触摸屏自动命名)
  18. echarts饼图显示百分比
  19. 仙童的ua741运算放大器内部电路
  20. 并行执行linux命令,如何使用Parallel在Shell中并行执行命令

热门文章

  1. Java 注解(Java Annotation)
  2. Java结构型设计模式之装饰者模式
  3. 前端对UI设计的特殊字体的处理
  4. Python 创建本地服务器环境生成二维码
  5. 人生每一件事都是为自己而做
  6. H3C交换机做DHCP
  7. Android-VR 支持流媒体
  8. 对vue.config.js中的代理服务器的理解
  9. nslookup java_使用JAVA实现nslookup命令
  10. 华为新系统鸿蒙,爆料|疑似华为新MatePad Pro包装盒曝光:搭载鸿蒙OS