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

首先发现如果我们按照他的方法模拟的话,势必时间爆炸。

所以我们从后往前推,因为我们知道最后一个的位置一定是对的,而前面的位置可以从后面推知。

这样做的好处就是只移动一个元素而不是移动该元素往后的所有元素。

那么怎么查询他应该在第几位就是个问题了。

我们知道线段树怎么写吧。

但是我们不知道线段树的其他功能还有替代部分二叉搜索树的功能。

一个节点表示它的区间内含有的没被插入的位置有多少。

那么我们知道对于一个pos,如果pos小于当前节点的左节点,那么我们往左走,否则减去左节点的值,走右节点。

那么我们就做完了!

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<iostream>
  6. using namespace std;
  7. inline int read(){
  8. int X=,w=; char ch=;
  9. while(ch<'' || ch>'') {w|=ch=='-';ch=getchar();}
  10. while(ch>='' && ch<='') X=(X<<)+(X<<)+(ch^),ch=getchar();
  11. return w?-X:X;
  12. }
  13. int tree[],pos[],val[],ans[];
  14. void build(int a,int l,int r){
  15. if(l==r){
  16. tree[a]=;
  17. return;
  18. }
  19. int mid=(l+r)>>;
  20. build(a*,l,mid);
  21. build(a*+,mid+,r);
  22. tree[a]=tree[a*]+tree[a*+];
  23. return;
  24. }
  25. void gai(int a,int l,int r,int p,int v){
  26. tree[a]--;
  27. if(l==r){
  28. ans[l]=v;
  29. return;
  30. }
  31. int mid=(l+r)>>;
  32. if(tree[a*]>p)gai(a*,l,mid,p,v);
  33. else gai(a*+,mid+,r,p-tree[a*],v);
  34. return;
  35. }
  36. int main(){
  37. int n;
  38. while(scanf("%d",&n)!=EOF){
  39. build(,,n);
  40. for(int i=;i<=n;i++){
  41. pos[i]=read();
  42. val[i]=read();
  43. }
  44. for(int i=n;i>=;i--){
  45. gai(,,n,pos[i],val[i]);
  46. }
  47. for(int i=;i<n;i++){
  48. printf("%d ",ans[i]);
  49. }
  50. printf("\n");
  51. }
  52. return ;
  53. }

POJ2828:Buy Tickets——题解的更多相关文章

  1. [POJ2828] Buy Tickets(待续)

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

  2. poj-2828 Buy Tickets(经典线段树)

    /* Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 10207 Accepted: 4919 Descr ...

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

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

  4. poj-----(2828)Buy Tickets(线段树单点更新)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 12930   Accepted: 6412 Desc ...

  5. POJ2828 Buy Tickets 【线段树】+【单点更新】+【逆序】

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 12296   Accepted: 6071 Desc ...

  6. poj2828 Buy Tickets (线段树 插队问题)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 22097   Accepted: 10834 Des ...

  7. POJ2828 Buy Tickets [树状数组,二分答案]

    题目传送门 Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 22611   Accepted: 110 ...

  8. POJ2828 Buy Tickets 树状数组

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

  9. poj-2828 Buy Tickets(线段树,排队问题,逆向思维)

    题目地址:POJ 2828 Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Yea ...

随机推荐

  1. MySQL日期比较

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: select * from product where add_time = '2013-0 ...

  2. Linux命令应用大词典-第38章 网络命令

    38.1 traceroute:显示跟踪到网络主机的路由数据包 38.2 mli-tool:查看.操纵网络接口状态 38.3 ifconfig:显示和配置网络接口 38.4 ifdown:关闭网络接口 ...

  3. SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false

    根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s is ...

  4. Siki_Unity_2-1_API常用方法和类详细讲解(下)

    Unity 2-1 API常用方法和类详细讲解(下) 任务101&102:射线检测 射线origin + direction:射线检测:射线是否碰撞到物体 (物体需要有碰撞器),碰撞物体的信息 ...

  5. nginx 重启报错

    错误信息: nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or d ...

  6. Python全栈 进阶(进阶内容都在这了)

    原文地址 https://yq.aliyun.com/articles/632754?spm=a2c4e.11155435.0.0.23eb3312feB6dG ................... ...

  7. [Clr via C#读书笔记]Cp19可空值类型

    Cp19可空值类型 主要解决的是和数据库中null对应的问题: System.Nullable结构:值类型: int?语法: 可空实例能够使用操作符: C#空合并操作符??; 即可用于引用类型,也可以 ...

  8. 如何让thinkpad X1C 用U盘 安装上专业版win10

    1 BIOS内置了文件 会导致win10 iso默认装家庭版 2 给iso 的resouse 目录中增加文件ei.cfg 3 内容如下 [EditionID]Professional[Channel] ...

  9. 1.Hadoop介绍

    1. Hadoop介绍 1.1 什么是Hadoop 开源的,可靠的,分布式的,可伸缩的 提供的功能: 利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 1.2 处理方式 大众角度 数 ...

  10. com技术学习

    百度百科概念 COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术.在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应 ...