[BZOJ 4923][Lydsy1706月赛]K小值查询
势能分析平衡树,splay或treap都可以
放个指针版的就跑
#include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) ; template <class T> inline bool check_Max(T &x, const T&y) { return x<y?x=y,false:true;} template <class T> inline bool check_Min(T &x, const T&y) { return x>y?x=y,false:true;} inline int gi() { ; char o; bool f=true; for(;!isdigit(o=getchar());) if(o=='-') f=false; )+(x<<)+(o&); ; } struct node {int v,ky,sz,lz; node *ls,*rs;}*rt,*nul,pool[maxn],*pis=pool; inline ; rt=nul;} node *newnode(; k->sz=; return k;} inline void add(node *&x,int vl) { x->v+=vl; x->lz+=vl; return ;} inline void pd(node *&x) { ; } inline ; } inline void mrg(node *&c,node *x,node *y) { if(x==nul||y==nul) {c=x==nul?y:x; return;} pd(x); pd(y); if(x->ky < y->ky) c=x,mrg(c->rs,x->rs,y); else c=y,mrg(c->ls,x,y->ls); up(c); } inline void spl(node *c,node *&x,node *&y,int rk) { if(c==nul) { x=y=nul; return;} pd(c); if(c->v <= rk) x=c,spl(c->rs,x->rs,y,rk); else y=c,spl(c->ls,x,y->ls,rk); up(c); } inline void insert(int vl) { node *x,*y; spl(rt,x,y,vl); mrg(x,x,newnode(vl)); mrg(rt,x,y); } int find(node *&x,int rk) { ==rk) return x->v; pd(x); if(rk<=x->ls->sz) return find(x->ls,rk); ); } inline void rec(node *&now,node *&x,int vl) { if(x==nul) return; pd(x); rec(now,x->ls,vl); rec(now,x->rs,vl); x->ls=x->rs=nul; x->sz=; x->v-=vl; node *x1,*y1; spl(now,x1,y1,x->v); mrg(x1,x1,x); mrg(now,x1,y1); } inline void cg(int k) { node *x,*y,*z; spl(rt,x,y,k); spl(y,y,z,k<<); add(z,-k); rec(x,y,k); mrg(rt,x,z); } int n,m; int main() { #ifndef ONLINE_JUDGE freopen("3.in","r",stdin); freopen("a.out","w",stdout); #endif n=gi();m=gi(); init(); rep(i,,n) insert(gi()); rep(i,,m) { int opt=gi(),K=gi(); ) printf("%d\n",find(rt,K)); else cg(K); } ; }
[BZOJ 4923][Lydsy1706月赛]K小值查询的更多相关文章
- 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 ...
- 4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap
国际惯例的题面:这种维护排序序列,严格大于的进行操作的题都很套路......我们按照[0,k],(k,2k],(2k,inf)分类讨论一下就好.显然第一个区间的不会变化,第二个区间的会被平移进第一个区 ...
- [BZ4923][Lydsy1706月赛]K小值查询
K小值查询 题面 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有严格大于k的数a_i减去k. Input ...
- BZOJ4923:[Lydsy1706月赛]K小值查询(Splay)
Description 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有严格大于k的数a_i减去k. In ...
- BZOJ4923 [Lydsy1706月赛]K小值查询
题意 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有严格大于k的数a_i减去k. \(n \leq 10 ...
- [bzoj4923]K小值查询
来自FallDream的博客,未经允许,请勿转载,谢谢. 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有 ...
- BZOJ4923 K小值查询(splay)
容易想到建一棵平衡树,修改时打上标记即可.但是修改会导致平衡树结构被破坏.注意到实际上只有[k+1,2k)这一部分数在平衡树中的位置会被改变,所以对这一部分暴力修改,因为每次都会使其至少减小一半,复杂 ...
- 【BZOJ】3065: 带插入区间K小值
http://www.lydsy.com/JudgeOnline/problem.php?id=3065 题意:带插入.修改的区间k小值在线查询.(原序列n<=35000, 询问<=175 ...
- bzoj 3065: 带插入区间K小值 替罪羊树 && AC300
3065: 带插入区间K小值 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 1062 Solved: 253[Submit][Status] Des ...
随机推荐
- 轻量级的同步机制——volatile语义详解(可见性保证+禁止指令重排)
目录 1.关于volatile 2.语义一:内存可见性 2.1 一个例子 2.2 java的内存模型(JMM) 2.3 happens-before规则 2.4 volatile解决内存可见性问题的原 ...
- ubuntu 12.04 ubuntu System program problem detected 解决方法
1. ubuntu System program problem detected本人操作系统是ubuntu12.04,不知道是系统出了问题还是装的软件有问题,每次开机都出现:System progr ...
- servlet01 项目demo、servlet生命周期
1 环境说明 jdk: 1.8 tomcat: 8.0 2 项目demo 2.1 新建一个动态的web项目 2.2 新建一个servlet类 该类必须继承 HttpServlet 技巧01:Htt ...
- 1、 Shiro框架:认证,授权(验权 2. Shiro框架实现权限控制方式:
1. Shiro框架:认证,授权(验权) a) 认证逻辑:applicationCode—>通过工具类获取subject对象,调用login方法参数令牌信息->安全管理器------> ...
- PCL 平面模型分割
点云操作中,平面的分割是经常遇到的问题,下面的例子就是如何利用PCL库提拟合出的参数,之后就可以过滤掉在平面附近的点云. #include <iostream> #include < ...
- hdu 4286 (list的reverse时间复杂度为n)
list 的翻转reverse源码: // 将链表倒置 // 其算法核心是历遍链表, 每次取出一个结点, 并插入到链表起始点 // 历遍完成后链表满足倒置 template <class T, ...
- hdu 1905 Pseudoprime numbers
#include<stdio.h> #include<math.h> #define ll long long ll mod; bool Judge(int x) { ;i&l ...
- vis用于做3D图表的js插件
vis.js用于做3D图表:(浏览网站需要FQ)实例:http://visjs.org/graph3d_examples.html代码下载:https://github.com/almende/vis
- javascript总结1:js常见页面消息输出方式 alert confirm console prompt document
.1 js常见的输出方法: 1-1 alert 警告框 alert("js语法总结"); 1-2 confirm 确认方法 confirm("js语法总结"); ...
- OnExit事件 OnChange事件
procedure TSetParkForm.edtPrePosExit(Sender: TObject); // 焦点移开 或已操作 begin if (G2.RowCount > 0) an ...