poj2828
很容易想到一种动态的做法:平衡树……
或者是二分+树状数组
但,前者编程复杂度较大,而且据说会被卡(没试过);后者理论上超时(据说可以擦边过?);
所以要尝试新的算法;
倒着考虑,显然最后一个对象的位置是最容易确定,顺带着,容易发现,
在第i个人后插入,就是在当前队列中前面有i个空位的空位置;
于是还是可以用平衡数……
当然更简单快捷的方法是线段树,每个节点表示这个区间还有的空位数;
然后类比平衡树的查找k大,很快就能写成
var tree:array[..] of longint;
p,a,w:array[..] of longint;
n,i:longint; procedure build(i,l,r:longint);
var m:longint;
begin
tree[i]:=r-l+;
m:=(l+r) shr ;
if l<>r then
begin
build(i*,l,m);
build(i*+,m+,r);
end;
end; function ask(i,l,r,k:longint):longint;
var m:longint;
begin
if l=r then
begin
tree[i]:=;
exit(l);
end;
m:=(l+r) shr ;
if tree[i*]>k then
begin
dec(tree[i*]); //在查找的过程中顺便把区间空位数更新
exit(ask(i*,l,m,k));
end
else begin
dec(tree[i*+]);
exit(ask(i*+,m+,r,k-tree[i*])); //有没有觉得很平衡树找区间k值神似
end;
end; begin
while not eoln do
begin
readln(n);
fillchar(tree,sizeof(tree),);
build(,,n);
for i:= to n do
readln(p[i],a[i]);
for i:=n downto do
w[i]:=ask(,,n,p[i]); //w代表每个点的位置
for i:= to n do
p[w[i]]:=a[i];
for i:= to n do
begin
write(p[i]);
if i<>n then write(' '); //注意别PE了
end;
writeln;
end;
end.
poj2828的更多相关文章
- 【POJ2828】Buy Tickets(线段树)
题意:有一个输入序列,每次操作要把b[i]插入到第a[i]个,在第a[i]个后面的要后移,问最后序列. n<=200000 思路:顺序来只能用splay维护 考虑倒序,对于插入到第K个位置,在线 ...
- 【poj2828】Buy Tickets 线段树 插队问题
[poj2828]Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Year in ...
- poj2828 Buy ticket
Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...
- poj2828 BuyTickets 线段树
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 17326 Accepted: 8601 Desc ...
- poj2828(线段树查找序列第k小的值)
题目链接:https://vjudge.net/problem/POJ-2828 题意:有n个人,依次给出这n个人进入队列时前面有多少人p[i],和它的权值v[i],求最终队列的权值序列. 思路:基本 ...
- 【poj2182】【poj2828】树状数组/线段树经典模型:逆序查找-空位插入法
poj2182题意:有一个1~n的排列,现在给定每个人前面有多少个人的编号比他大,求这个排列是什么.n<=8000 poj2182题解: 逆序做,可以确定二分最后一个是什么,然后删除这个数.树状 ...
- POJ-2828 Buy Tickets---线段树+逆序
题目链接: https://cn.vjudge.net/problem/POJ-2828 题目大意: 插队的问题,每个案例给出n,代表有n个插队的,每个给出p,v,意思是代号为v的人插在了第p个人的后 ...
- [POJ2828] Buy Tickets(待续)
[POJ2828] Buy Tickets(待续) 题目大意:多组测试,每组给出\(n\)条信息\((a,b)\),表示\(b\)前面有\(a\)个人,顺序靠后的信息优先级高 Solution.1 由 ...
- POJ2828 Buy Tickets[树状数组第k小值 倒序]
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 19012 Accepted: 9442 Desc ...
- 【poj2828】Buy Tickets
Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...
随机推荐
- 《HTML5 CANVAS基础教程》读书笔记
一.HTML5简介 1.HTML5新特性 1)结构元素:section,header,hgroup,footer,nav,article,aside, 2)内容元素:figure,figcaption ...
- 获取股票历史数据和当前数据的API
关键字:股票,stock,API,接口 1.获取股票当前数据 新浪数据接口:http://hq.sinajs.cn/list={code}.{code}替换为股票代码,沪市股票代码加前缀sh,深市股票 ...
- .NET基础之深度复制和浅度复制
之前一直没有搞清楚深度复制和浅度复制的区别到底在哪里,今天彻底把这个东西弄懂了,写出来与到家共勉. 如果大家不懂值类型和引用类型的区别,请先看http://www.cnblogs.com/Autumo ...
- Linux VM 设置静态ip地址上网
因为是路由器共享上网,VM每次都是通过DHCP方式自动获取ip地址,连接Linux VM时ip地址经常变,很麻烦.现在把VM设置静态ip的方法总结一下,以免以后忘了. 1. VM上网方式设置为桥接. ...
- 在Linux中,如何取出一个字符串的前5位
问: 在Linux中,如何取出一个字符串的前5位? 常用的一些方法如下: [tough@toughhou ~]$ str=abcdef [tough@toughhou ~]$ echo $str ab ...
- 【socket】一分钟理清 socket udpsocket tcpsocket tcplistener TCPClient和 UDPClient
socket 套接字接口是各种语言tcp udp的网络操作的基础. 直接用socket 对象开发 可以选择 udpsocket 或者 tcpsocket ,两者在使用上仅一些方法和参数不同,所有的底 ...
- ExtJs 4.2 treePanel 点击树节点 传送参数到后台(多个参数)
//***********************************************左边树开始********************************************** ...
- EntityFramework.Extended
记录 Entity Framework扩展,可以实现批量更新.删除,但需要EntityFramework6.0支持,需要支持低版本的EF,可下载该扩展的低版本. https://www.nuget.o ...
- jquery easyui无法绑定下拉框内容
最近在研究jquery easyui的DataGrid,发现DataGrid中的下拉框无法绑定值,找了很久也没发现是具体问题所在,最后还是同事帮忙搞定的.具体问题竟然是jquery easyui提供的 ...
- [转载]js 遍历数组对象
有一个JSON数组如下 all = {"error":0,"content":[{"name":"北京","v ...