题意

传送门

分析

参照博客

树状数组+离线处理即可。

利用树状数组下标本质即可\(O(\log n)\)求第k大。

代码

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<cstdio>
  5. #include<set>
  6. #include<map>
  7. #include<queue>
  8. #include<vector>
  9. #include<algorithm>
  10. #include<string>
  11. #define co const
  12. #define il inline
  13. #define rg register
  14. const int MAXBUF=20000005;
  15. char B[MAXBUF],*Si=B,*Ti=B;
  16. inline char getc()
  17. {
  18. if (Si==Ti) Ti=(Si=B)+fread(B,1,MAXBUF,stdin);
  19. if (Si==Ti) return 0;
  20. return *Si++;
  21. }
  22. template <class T>
  23. inline void read(T &a)
  24. {
  25. static char c;
  26. while ((c=getc())<'0'||c>'9');
  27. a=c-'0';
  28. while ((c=getc())>='0'&&c<='9') a=(a<<3)+(a<<1)+c-'0';
  29. }
  30. using namespace std;
  31. typedef long long ll;
  32. co int MAXN=3e5+7;
  33. int n,m,nq;
  34. int q[MAXN][2];
  35. struct $
  36. {
  37. int p,id;
  38. $(){}
  39. $(int p,int id):p(p),id(id){}
  40. };
  41. vector <$> t[MAXN];
  42. typedef vector<$>::iterator it;
  43. int c[MAXN<<1],mx; // edit 1
  44. int lowbit(int x)
  45. {
  46. return x&-x;
  47. }
  48. void add(int p,int v)
  49. {
  50. for(int i=p;i<=mx;i+=lowbit(i))
  51. c[i]+=v;
  52. }
  53. int sum(int p)
  54. {
  55. int res=0;
  56. for(int i=p;i;i-=lowbit(i))
  57. res+=c[i];
  58. return res;
  59. }
  60. int find(int p)
  61. {
  62. int res=0;
  63. for(int i=20;i>=0;--i)
  64. {
  65. res+=(1<<i);
  66. if(res>mx||c[res]>=p) // 不足最后加1,过剩则无法处理
  67. res-=(1<<i);
  68. else
  69. p-=c[res];
  70. }
  71. return res+1;
  72. }
  73. int d[MAXN];
  74. vector<ll>v[MAXN],lst;
  75. int main()
  76. {
  77. // freopen(".in","r",stdin);
  78. // freopen(".out","w",stdout);
  79. read(n);read(m);read(nq);
  80. mx=max(n,m)+nq;
  81. for(int i=1;i<=nq;++i)
  82. {
  83. read(q[i][0]);read(q[i][1]);
  84. if(q[i][1]!=m)
  85. t[q[i][0]].push_back($(q[i][1],i));
  86. }
  87. for(int i=1;i<=mx;++i)
  88. add(i,1);
  89. for(int i=1;i<=n;++i)
  90. {
  91. for(it j=t[i].begin();j!=t[i].end();++j)
  92. add(d[j->id]=find(j->p),-1);
  93. for(it j=t[i].begin();j!=t[i].end();++j)
  94. add(d[j->id],1);
  95. }
  96. ll ans;
  97. for(int i=1;i<=nq;++i)
  98. {
  99. int x=find(q[i][0]);
  100. ans=x<=n?(ll)x*m:lst[x-n-1];
  101. add(x,-1);
  102. if(q[i][1]!=m)
  103. {
  104. v[q[i][0]].push_back(ans);
  105. ans=d[i]<m?((ll)q[i][0]-1)*m+d[i]:v[q[i][0]][d[i]-m];
  106. }
  107. lst.push_back(ans);
  108. printf("%lld\n",ans);
  109. }
  110. return 0;
  111. }

LG3960 列队的更多相关文章

  1. 关于PHP堆栈与列队

    在PHP中数组常被当作堆栈(后进先出:LIFO)与队列(先进先出:FIFO)结构来使用.PHP提供了一组函数可以用于push与pop(堆栈)还有shift与unshift(队列)来操作数组元素.堆栈与 ...

  2. 在PHP中如何使用消息列队

    /** * 消息列队服务 * @author zhou.tingze * @example * -----------------------------------Create----------- ...

  3. BZOJ2720: [Violet 5]列队春游

    2720: [Violet 5]列队春游 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 173  Solved: 125[Submit][Status] ...

  4. [NOIp 2017]列队

    Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有$n \times m$名学生, ...

  5. NOIP2017D2T3 列队—Treap

    NOIP2017列队 Description Sylvia 是一个热爱学习的女孩子.  前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m ...

  6. P2649 - 【NOIP2017】列队

    Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m 名学生,方阵的行数为 ...

  7. WebForm应用log4net记录错误日志——使用线程列队写入

    我的项目结构如下图: 日志帮助类库需要log4net包:工具—NuGet包管理器—管理解决方案NuGet程序包 线程日志帮助类 FlashLogger.cs 代码 using System; usin ...

  8. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  9. [NOIP]2017列队——旋转treap/非旋转treap

    Sylvia 是一个热爱学习的女孩子.  前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m名学生,方阵的行数为 n,列数为m.  为了便 ...

随机推荐

  1. JavaScript内部原理系列-执行上下文(Execution Context)

    概要 本文将向大家介绍ECMAScript的执行上下文以及相关的可执行代码类型. 定义 每当控制器到达ECMAScript可执行代码的时候,控制器就进入了一个执行上下文.执行上下文(简称:EC)是个抽 ...

  2. 《Think in Java》(十七)容器深入研究

    阿西吧,这一章好长啊,感觉看了快一个月了吧!JDK 自带的容器框架真是很好很强大啊,这一章看得有点蒙蒙的,接下来还得去看看官方文档啊!

  3. JavaScript encodeURIComponent()

    ■ 把字符串作为 URI 组件进行编码.JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unes ...

  4. zabbix自动化运维学习笔记(服务器安装)

    最近博主开始接触自动化运维.首先就是zabbix这个开源的监控系统 一开始博主只是在自己的虚拟机上尝试安装.最后终于开始在公司的服务器上正式安装,教程博主也是通过度娘找的 这是原文:链接 安装环境:C ...

  5. C++(三十) — this 指针

    1.如何区分多个对象调用同一个类函数? 类外部访问类成员,必须用对象来调用.一个类的所有对象在调用的成员函数,都执行同一段代码,那成员函数如何区分属于哪个对象呢? 在对象调用成员函数时,除接收实参外, ...

  6. ArcMap加载在线地图

    SimpleGIS 小小的SimpleGIS除了提供6大地图让人喜爱之外,更有其他的能耐同样让你爱不释手. 功能1:作为出图底图地图提供商中Bing.天地图两家提供的地图是无偏移的地图,所以可直接应用 ...

  7. es6 nodejs compose

    const compose = (...fns) => { let len = fns.length; let fn_index = len - 1; let fn_result; functi ...

  8. 【2018 “百度之星”程序设计大赛 - 初赛(B)-1004】p1m2(迷之二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6383 题目就是让你求一个整数数组,在进行任意元素 + 1. - 2 操作后,请问在所有可能达到的稳定数 ...

  9. js 倒计时 时间戳

    功能:传入一个截止时间(unix时间戳),显示倒计时 因为unix时间戳,并不等于js 的new Date().getTime()得到的那一串毫秒数,所以要在JS中使用unix时间戳,必须先转换一下u ...

  10. SpringXML方式给bean初始化属性值

    可以在Spring容器初始化bean的时候给bean的属性赋初始值,直接在property标签里设置即可 1 2 3 4 5 6 <bean name="user**" cl ...