传送门

势能分析平衡树,splay或treap都可以

放个指针版的就跑

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,b) for(int i=a;i<=b;++i)
  4. ;
  5. template <class T> inline bool check_Max(T &x, const T&y) { return x<y?x=y,false:true;}
  6. template <class T> inline bool check_Min(T &x, const T&y) { return x>y?x=y,false:true;}
  7. inline int gi() {
  8. ; char o; bool f=true; for(;!isdigit(o=getchar());) if(o=='-') f=false;
  9. )+(x<<)+(o&); ;
  10. }
  11. struct node {int v,ky,sz,lz; node *ls,*rs;}*rt,*nul,pool[maxn],*pis=pool;
  12. inline ; rt=nul;}
  13. node *newnode(; k->sz=; return k;}
  14. inline void add(node *&x,int vl) { x->v+=vl; x->lz+=vl; return ;}
  15. inline void pd(node *&x) {
  16. ;
  17. }
  18. inline ; }
  19. inline void mrg(node *&c,node *x,node *y) {
  20. if(x==nul||y==nul) {c=x==nul?y:x; return;}
  21. pd(x); pd(y);
  22. if(x->ky < y->ky) c=x,mrg(c->rs,x->rs,y);
  23. else c=y,mrg(c->ls,x,y->ls); up(c);
  24. }
  25. inline void spl(node *c,node *&x,node *&y,int rk) {
  26. if(c==nul) { x=y=nul; return;}
  27. pd(c);
  28. if(c->v <= rk) x=c,spl(c->rs,x->rs,y,rk);
  29. else y=c,spl(c->ls,x,y->ls,rk); up(c);
  30. }
  31. inline void insert(int vl) {
  32. node *x,*y; spl(rt,x,y,vl);
  33. mrg(x,x,newnode(vl)); mrg(rt,x,y);
  34. }
  35. int find(node *&x,int rk) {
  36. ==rk) return x->v;
  37. pd(x);
  38. if(rk<=x->ls->sz) return find(x->ls,rk);
  39. );
  40. }
  41. inline void rec(node *&now,node *&x,int vl) {
  42. if(x==nul) return; pd(x); rec(now,x->ls,vl); rec(now,x->rs,vl);
  43. x->ls=x->rs=nul; x->sz=; x->v-=vl;
  44. node *x1,*y1; spl(now,x1,y1,x->v); mrg(x1,x1,x); mrg(now,x1,y1);
  45. }
  46. inline void cg(int k) {
  47. node *x,*y,*z; spl(rt,x,y,k); spl(y,y,z,k<<);
  48. add(z,-k); rec(x,y,k); mrg(rt,x,z);
  49. }
  50. int n,m;
  51. int main() {
  52. #ifndef ONLINE_JUDGE
  53. freopen("3.in","r",stdin);
  54. freopen("a.out","w",stdout);
  55. #endif
  56. n=gi();m=gi();
  57. init();
  58. rep(i,,n) insert(gi());
  59. rep(i,,m) {
  60. int opt=gi(),K=gi();
  61. ) printf("%d\n",find(rt,K));
  62. else cg(K);
  63. }
  64. ;
  65. }

[BZOJ 4923][Lydsy1706月赛]K小值查询的更多相关文章

  1. BZOJ 4923: [Lydsy1706月赛]K小值查询 Splay + 思维

    Description 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有严格大于k的数a_i减去k. In ...

  2. 4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap

    国际惯例的题面:这种维护排序序列,严格大于的进行操作的题都很套路......我们按照[0,k],(k,2k],(2k,inf)分类讨论一下就好.显然第一个区间的不会变化,第二个区间的会被平移进第一个区 ...

  3. [BZ4923][Lydsy1706月赛]K小值查询

    K小值查询 题面 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有严格大于k的数a_i减去k. Input ...

  4. BZOJ4923:[Lydsy1706月赛]K小值查询(Splay)

    Description 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有严格大于k的数a_i减去k. In ...

  5. BZOJ4923 [Lydsy1706月赛]K小值查询

    题意 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有严格大于k的数a_i减去k. \(n \leq 10 ...

  6. [bzoj4923]K小值查询

    来自FallDream的博客,未经允许,请勿转载,谢谢. 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有 ...

  7. BZOJ4923 K小值查询(splay)

    容易想到建一棵平衡树,修改时打上标记即可.但是修改会导致平衡树结构被破坏.注意到实际上只有[k+1,2k)这一部分数在平衡树中的位置会被改变,所以对这一部分暴力修改,因为每次都会使其至少减小一半,复杂 ...

  8. 【BZOJ】3065: 带插入区间K小值

    http://www.lydsy.com/JudgeOnline/problem.php?id=3065 题意:带插入.修改的区间k小值在线查询.(原序列n<=35000, 询问<=175 ...

  9. bzoj 3065: 带插入区间K小值 替罪羊树 && AC300

    3065: 带插入区间K小值 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1062  Solved: 253[Submit][Status] Des ...

随机推荐

  1. linux设置rsync+inotify实时同步文件

    linux设置rsync+inotify实时同步文件   应用场景: 同步接收方:test01 接收目录:/opt/software/test/a/ 同步发起方:test02 同步目录:/opt/so ...

  2. win7安装linux双系统

    整体流程大概就是下载启动盘制作工具以及linux镜像,这些步骤网上很多,我就不再重复了 这里以centos举例说几个我踩到的坑吧 1.选择开始安装后提示 Warning: /dev/root does ...

  3. realsense and Mask_RCNN

    ###################librealsense and Mask_RCNN cd RealSennse/librealsense2018091501/librealsense/wrap ...

  4. 微信内置浏览器中的cookie很诡异呀

    微信内置浏览器中的cookie很诡异呀 这是设置和删除COOKIE的代码 function set_cookie($var ,$value = '' ,$expire = 0){ $path = '/ ...

  5. c语言学习笔记 多级else if 和switch case有什么区别

    ; ) { dosth(); } ) { dosth2(); } else if(opion==) { dosth3(); } else dosth4(); 如果给option的一个值是2的话,那么程 ...

  6. java方法学习记录

    ---恢复内容开始--- 方法重载:两个方法有相同的名字,但参数不同,就是方法重载,且不能仅仅依据修饰符或者返回类型的不同来重载方法. 命令行参数的使用 有时候你希望运行一个程序时候再传递给它消息.这 ...

  7. [GO]随机生成四们数字

    package main import ( "math/rand" "time" "fmt" ) func InitData(p *int) ...

  8. OpenGL绘图框架(GLFW)

    下载地址:http://www.glfw.org/download.html

  9. 无法解析的外部符号 _WinMain@16(原)

    原来的控制台程序,想修改为windows程序时,会出现 无法解析的外部符号 WinMain,该符号在函数 __tmainCRTStartup 中被引用 在链接器->高级->入口点输入:ma ...

  10. TP5图片上传

    /*图片上传*/ public function upload(){ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('file'); // 移 ...