很容易想到一种动态的做法:平衡树……

或者是二分+树状数组

但,前者编程复杂度较大,而且据说会被卡(没试过);后者理论上超时(据说可以擦边过?);

所以要尝试新的算法;

倒着考虑,显然最后一个对象的位置是最容易确定,顺带着,容易发现,

在第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的更多相关文章

  1. 【POJ2828】Buy Tickets(线段树)

    题意:有一个输入序列,每次操作要把b[i]插入到第a[i]个,在第a[i]个后面的要后移,问最后序列. n<=200000 思路:顺序来只能用splay维护 考虑倒序,对于插入到第K个位置,在线 ...

  2. 【poj2828】Buy Tickets 线段树 插队问题

    [poj2828]Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Year in ...

  3. poj2828 Buy ticket

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

  4. poj2828 BuyTickets 线段树

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 17326   Accepted: 8601 Desc ...

  5. poj2828(线段树查找序列第k小的值)

    题目链接:https://vjudge.net/problem/POJ-2828 题意:有n个人,依次给出这n个人进入队列时前面有多少人p[i],和它的权值v[i],求最终队列的权值序列. 思路:基本 ...

  6. 【poj2182】【poj2828】树状数组/线段树经典模型:逆序查找-空位插入法

    poj2182题意:有一个1~n的排列,现在给定每个人前面有多少个人的编号比他大,求这个排列是什么.n<=8000 poj2182题解: 逆序做,可以确定二分最后一个是什么,然后删除这个数.树状 ...

  7. POJ-2828 Buy Tickets---线段树+逆序

    题目链接: https://cn.vjudge.net/problem/POJ-2828 题目大意: 插队的问题,每个案例给出n,代表有n个插队的,每个给出p,v,意思是代号为v的人插在了第p个人的后 ...

  8. [POJ2828] Buy Tickets(待续)

    [POJ2828] Buy Tickets(待续) 题目大意:多组测试,每组给出\(n\)条信息\((a,b)\),表示\(b\)前面有\(a\)个人,顺序靠后的信息优先级高 Solution.1 由 ...

  9. POJ2828 Buy Tickets[树状数组第k小值 倒序]

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 19012   Accepted: 9442 Desc ...

  10. 【poj2828】Buy Tickets

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

随机推荐

  1. [ Windows] [ OS ] [ Remote Desktop ] 開啟同一個帳號同時2的連線RDP的方式

    感謝同事 Allen 的Support :) 執行>gpedit.msc 電腦設定>Windows元件>遠端桌面服務>遠端桌面工作階段主機>連線>限制遠端桌面服務的 ...

  2. android 打开GPS的几种方式

    1.在讨论打开gps的之前先看下如何检测gps的开关情况: 方式一: boolean gpsEnabled = locationManager.isProviderEnabled(LocationMa ...

  3. 九度OJ1172--哈夫曼树

    哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和. 输入: 输入有多组数据.每 ...

  4. Visual C++2010开发权威指南 中文高清PDF - VC.NET

    第一部分  Visual C++ 2010开发与新特性第1章  Visual C++ 2010开发环境简介 11.1  Visual C++ 2010简介 11.2  Visual C++ 2010下 ...

  5. Python urllib2多进程共享cookies

    如果想多个进程共享同一个cookies,不用每个进程都重新登录,可以就cookies保存到一个文件,然后多个进程直接共享一个锁来实现 1.一个进程登录完成后,把cookies保存到一个文件里面 sel ...

  6. gulp前端自动化构建工具入门篇

    现在我们通过这3个问题来学习一下: 1.什么是gulp? 2.为什么要用gulp? 3.怎么用?   什么是gulp 答:是一个前端自动化的构建工具,直白点说,如果没有这个工具,我们利用人工依旧可以做 ...

  7. 【MyBatis】 通过包含的jdbcType类型

    BIT         FLOAT      CHAR           TIMESTAMP       OTHER       UNDEFINED TINYINT     REAL       V ...

  8. easy ui datagrid 动态绑定数据并绑定链接,进行操作

    ①.绑定datagrid,formatter { field: 'ShopId', title: '操作', width: 200, align: 'left', formatter: showSho ...

  9. Guide to Database Migration from Microsoft SQL Server using MySQL Workbench

    http://mysqlworkbench.org/2012/07/migrating-from-ms-sql-server-to-mysql-using-workbench-migration-wi ...

  10. awk 的一个奇怪异常

    awk: cmd. line:1: (FILENAME=- FNR=192) fatal: print to "standard output" failed (No space ...