[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 ...
随机推荐
- Java,Calendar -- 获取当前日期、当月月初日期、月末日期
public class CalendarTest { public static void main(String[] args) { // 获取当前年份.月份.日期 Calendar cale = ...
- Centos里没有lsb_release
查看Centos操作系统版本,输入指令 lsb_release -a 报无此命令 解决办法,安装lsb_release 1.执行指令:yum install -y redhat-lsb 2.安装完毕后 ...
- c语言实践输出某个区间中不是3的倍数的偶数
OK,先审题,我们最后要输出的那些数是需要满足两个条件的,第一个条件是,这个数不是3的倍数,第二个条件是这个数是偶数.也就是这样的数需要同时满足这两个条件的时候才把这个数输出. 不是3的倍数这个条件在 ...
- c语言实践:求两个数的最大公约数
我的思路是这样的:比如12和16这两个数.先理解一下概念,什么叫最大公约数.就是12有很多个因数,16也有很多个因数,这两堆因数中有一些重合的因数,在这些重合的因数中找到那个最大的.那么最大公约数一定 ...
- PyV8在服务端运行自动崩溃问题
近来想在服务端架设WSGI + PyV8去自动解析JavaScript代码,然后返回解析后的数据给客户端.但是发现,在nginx配置后,客户端一请求,服务端的python脚本自动崩溃. 见代码: de ...
- getContextPath、getServletPath、getRequestURI,getRealPath的区别
假定你的web application 项目名称为news,你在浏览器中输入请求路径: http://localhost:8080/news/main/list.jsp 则执行下面向行代码后打印出如下 ...
- javascript总结17:javascript 函数简介
1 释义:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. 2 格式:通过 function 关键字. function test(){ alert("您好"); } ...
- FractalNet(分形网络)
-Argues that key is transitioning effectively from shallow to deep and residual representations are ...
- vmware ubuntu安装vmware tools
vmware tools可以说是其平台虚拟机必不可少的工具,可以使母机(你的电脑)通过复制粘贴向虚拟机中传递文件信息,对我们虚拟机的使用由非常大的帮助,当然也可以通过使用共享硬盘来共享文件,但操作起来 ...
- poj3080 Blue Jeans(暴枚+kmp)
Description The Genographic Project is a research partnership between IBM and The National Geographi ...