题链:

http://poj.org/problem?id=2828

题解:

线段树。

逆向考虑这个过程。最后的序列S共有n个元素。

先看最后一个人,如果他插入到第i位,那么他最终的位置就是当前序列S的第i号位置,然后把这个位置去掉,得到新序列S'。

再按上面的操作确定倒数第二个人的位置:

如果他插入到第j位,那么他就在新序列S'的第j个位置。

。。。。。。以此类推,可以确定出所有人的位置。

可以用线段树去确定位置。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 200050
using namespace std;
struct People{
int p,d;
}P[MAXN];
struct SGT{
int ls[MAXN<<1],rs[MAXN<<1],siz[MAXN<<1],sz,rt;
void build(int &u,int l,int r){
u=++sz; siz[u]=r-l+1;
if(l==r) return;
int mid=(l+r)/2;
build(ls[u],l,mid);
build(rs[u],mid+1,r);
}
void Reset(int n){
sz=rt=0;
build(rt,1,n);
}
int Modify(int u,int l,int r,int k){
siz[u]--; if(l==r) return l;
int mid=(l+r)/2;
if(k<=siz[ls[u]]) return Modify(ls[u],l,mid,k);
else return Modify(rs[u],mid+1,r,k-siz[ls[u]]);
}
}DT;
int ANS[MAXN];
int main(){
int n;
while(~scanf("%d",&n)){
DT.Reset(n);
for(int i=1;i<=n;i++) scanf("%d%d",&P[i].p,&P[i].d);
for(int i=n,p;i;i--){
p=DT.Modify(DT.rt,1,n,P[i].p+1);
ANS[p]=P[i].d;
}
for(int i=1;i<n;i++) printf("%d ",ANS[i]);
if(n) printf("%d\n",ANS[n]);
}
return 0;
}

  

●POJ 2828 Buy Tickets的更多相关文章

  1. POJ 2828 Buy Tickets(排队问题,线段树应用)

    POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意:  排队买票时候插队.  给出一些数对,分别代表某个人的想要插入的位 ...

  2. poj 2828 Buy Tickets(树状数组 | 线段树)

    题目链接:poj 2828 Buy Tickets 题目大意:给定N,表示有个人,给定每一个人站入的位置,以及这个人的权值,如今按队列的顺序输出每一个人的权值. 解题思路:第K大元素,非常巧妙,将人入 ...

  3. poj 2828 Buy Tickets 【线段树点更新】

    题目:id=2828" target="_blank">poj 2828 Buy Tickets 题意:有n个人排队,每一个人有一个价值和要插的位置,然后当要插的位 ...

  4. 线段树(单点更新) POJ 2828 Buy tickets

    题目传送门 /* 结点存储下面有几个空位 每次从根结点往下找找到该插入的位置, 同时更新每个节点的值 */ #include <cstdio> #define lson l, m, rt ...

  5. poj 2828 Buy Tickets (线段树(排队插入后输出序列))

    http://poj.org/problem?id=2828 Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissio ...

  6. poj 2828 Buy Tickets 树状数组

    Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Year in China, so ...

  7. poj 2828 Buy Tickets (线段树 单节点 查询位置更新)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 15533   Accepted: 7759 Desc ...

  8. POJ 2828 Buy Tickets(线段树 树状数组/单点更新)

    题目链接: 传送门 Buy Tickets Time Limit: 4000MS     Memory Limit: 65536K Description Railway tickets were d ...

  9. poj 2828 Buy Tickets【线段树单点更新】【逆序输入】

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 16273   Accepted: 8098 Desc ...

  10. 线段树(倒序操作):POJ 2828 Buy Tickets

    Buy Tickets   Description Railway tickets were difficult to buy around the Lunar New Year in China, ...

随机推荐

  1. c字符数组

    一.PTA实验作业 题目1:统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 定义一个长度为1000的字符数组str[1000] 在定义 i=0,cnt=0:cnt用来记录单词的个数 ...

  2. 【Alpha版本】冲刺阶段 - Day7 - 靠泊

    Alpha:指集成了主要功能的第一个试用版本.在这个版本中有些小功能并未实现.事实上很多软件的 Alpha 版本只是在内部使用.给外部用户使用的 Alpha 版本会起一个比较美妙的名字,例如,技术预览 ...

  3. 201621123040《Java程序设计》第十周学习总结

    1.本周学习总结 2.书面作业 2.1常用异常 2.1.1自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 算术异常ArithmeticException(除数为0的情况) 类 ...

  4. lambda及参数绑定

    一.介绍   对于STL中的算法,我们都可以传递任何类别的可调用对象.对于一个对象或一个表达式,如果可以对其使用调用运算符,则称它为可调用的.即,如果e是一个可调用的表达式,则我们可以编写代码e(ar ...

  5. 20162330 实验二 《Java面向对象程序设计》 实验报告

    2016-2017-2 实验报告目录: 1 2 3 4 5 20162330 实验二 <Java面向对象程序设计> 实验报告 课程名称:<程序设计与数据结构> 学生班级:162 ...

  6. bzoj千题计划245:bzoj1095: [ZJOI2007]Hide 捉迷藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1095 查询最远点对,带修改 显然可以用动态点分治 对于每个点,维护两个堆 堆q1[x] 维护 点分树 ...

  7. EasyUi中对话框。

    html页面代码: <head id="Head1" runat="server"> <meta http-equiv="Conte ...

  8. Mego开发文档 - 数据属性生成值

    数据属性生成值 该功能用于在数据插入或更新时为指定属性生成期望的值,Mego提供了非常灵活的实现方式以满足各种数据提交时的自动赋值问题. 生成值目的及模式 在Mego中生成值的目的一定是插入数据或更新 ...

  9. 如何在pycharm中使用配置好的virtualenv环境

    1.手动建立: 第一步 建立虚拟环境 Windows cmd: pip install virtualenv 创建虚拟环境目录 env 激活虚拟环境 C:\Python27\Scripts\env\S ...

  10. hdu 6205 card card card

    https://vjudge.net/contest/184514#problem/L题意:排成一行的一堆牌,每堆牌都有一定数量的牌,然后每堆牌对应有一个惩罚值.一开始所有的牌都是正面向下的,并且在游 ...