题目链接: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代码:

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<string>
#include<cmath>
using namespace std;
const int N = ;
int T,tot;
int pre[N],vis[N];
struct TT
{
int x,y;
}a[N];
int lowbit(int x)
{
return x&(-x);
}
void init()
{
for(int i=;i<=T;i++)
vis[i] =lowbit(i);
}
int sum(int x)
{
int ans = ;
while(x>)
{
ans = ans+vis[x];
x = x-lowbit(x);
}
return ans;
}
int update(int x)
{
while(x<=T)
{
vis[x] = vis[x] - ;
x = x +lowbit(x);
}
}
void add(int x,int y)
{
int l=,r=T,mid;
while(l<r)
{
//printf("l === %d %d %d\n",l,r,mid);
mid = (l+r)/;
if(sum(mid)>=x) r = mid;
else l = mid+;
}
//printf("l = %d\n",l);
update(l);
pre[l] = y;
}
int main()
{
int aa,bb;
while(~scanf("%d",&T))
{
init();
for(int i=;i<=T;i++)
{
scanf("%d %d",&aa,&bb);
a[i].x = aa+;
a[i].y = bb;
}
for(int i=T;i>;i--)
add(a[i].x,a[i].y);
for(int i=;i<=T;i++)
{
if(i==) printf("%d",pre[i]);
else printf(" %d",pre[i]);
}
printf("\n");
}
return ;
}

poj Buy Tickets的更多相关文章

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

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

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

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

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

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

  4. poj 2828 Buy Tickets 树状数组

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

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

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

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

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

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

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

  8. Buy Tickets POJ - 2828 思维+线段树

    Buy Tickets POJ - 2828 思维+线段树 题意 是说有n个人买票,但是呢这n个人都会去插队,问最后的队列是什么情况.插队的输入是两个数,第一个是前面有多少人,第二个是这个人的编号,最 ...

  9. H - Buy Tickets POJ - 2828 逆序遍历 树状数组+二分

    H - Buy Tickets POJ - 2828 这个题目还是比较简单的,其实有思路,不过中途又断了,最后写了一发别的想法的T了. 然后脑子就有点糊涂,不应该啊,这个题目应该会写才对,这个和之前的 ...

随机推荐

  1. 18 个最佳代码编辑器/IDE推荐

    本文为开发人员收录了18个最好的代码编辑器/IDE工具,希望你会喜欢. 1) chocolatapp Chocolat是最新出现的一款强大的Mac系统文本编辑器,兼具原生的Cocoa及强大的文本编辑功 ...

  2. 公司机器(线上机器)启动ftp任务的命令

    这个命令: /usr/local/proftp/sbin/proftpd 注意要在root账户,并且kill掉原来的同名进程.

  3. PHP之is_a()函数执行代码之总结

    今天看到云舒在群里贴的漏洞公告,原始的文章在 http://www.byte.nl/blog/2011/09/23/security-bug-in-is_a-function-in-php-5-3-7 ...

  4. CF(D. Fibonacci Sums)dp计数

    题目链接:http://codeforces.com/contest/126/problem/D 题意:一个数能够有多种由互不同样的斐波那契数组成的情况: 解法:dp,easy证明:每一个数通过贪心能 ...

  5. Spring集成ActiveMQ配置 --转

    转自:http://suhuanzheng7784877.iteye.com/blog/969865 集成环境 Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可 ...

  6. python fabric使用 http://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html

    fab -u username -p password  -H hostname -P -- cmd   或root@'hostname'  -H多个主机是引号用逗号隔开 -P异步

  7. LoadRunner录制: 选择协议

    LR录制的时候关心的是通信,关心的是客户端和服务器之间的数据包.它通过监控客户端和服务器之间的通信,转化为自己的函数. 协议选择错误,可能会导致录制下来的内容为空. 方法一:根据经验来选择协议 Web ...

  8. Python Hashtable的理解

           一个对象当其生命周期内的hash值不发生改变,而且可以跟其他对象进行比较时,这个对象就是Hashtable的.两者Hashtable的对象只有具有相同的hash值时才能判断为相同的对象. ...

  9. 也谈编译 VS 解释

    语言发展 计算机的硬件仅仅能识别0和1组成的机器指令,而机器指令是最主要的计算机语言,可是我们平时进行程序设计时肯定不会用机器语言来编程,由于用它的效率低.更让人难以理解. 因此聪明的人类发明了汇编语 ...

  10. Python中的__name__

    python中if __name__ == '__main__': 的解析 经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且 ...