传送门

势能分析平衡树,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小值查询的更多相关文章

  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. Codeforces 1109E 线段树

    思路及博客:https://www.cnblogs.com/uid001/p/10507346.html 代码: #include <bits/stdc++.h> #define LL l ...

  2. 数字图像处理实验(17):PROJECT 06-04,Color Image Segmentation 标签: 图像处理MATLAB 2017-05-27 21:13

    实验报告: Objective: Color image segmentation is a big issue in image processing. This students need to ...

  3. 登录到 SQL Server 实例

    登录到 SQL Server 实例(命令提示符)   登录到 SQL Server 的默认实例 从命令提示符输入以下命令,使用 Windows 身份验证进行连接:     sqlcmd [ /E ] ...

  4. 【Head First Java 读书笔记】(二)类与对象

    前篇当中,代码都放在main()里面,那根本不是面向对象的做法. 椅子大战(对象如何改变你的一生) 程序规格: 在图形接口画出四方形,圆形和三角形,当用户点选图形时,图形需要顺时针转360度并依据形状 ...

  5. win32的计数增减操作的原子操作--InterLockedIncrement和InterlockedDecrement

    InterLockedIncrement and InterLockedDecrement 实现数的原子性加减. 什么是原子性的加减呢? 举个例子:如果一个变量 Long value =0; 首先说一 ...

  6. C# 取得内网IP、外网IP、客户端IP方法

    前言 在 Windows Form Application 里对于取得 IP Address 有内网.外网两种 IP Address ,如果只需要取得内网 IP Address ,可以透过使用 IPH ...

  7. C# static 字段初始值设定项无法引用非静态字段、方法或属性

    问题:字段或属性的问题字段初始值设定项无法引用非静态字段.方法 下面代码出错的原因,在类中定义的字段为什么不能用? public string text = test(); //提示 字段或属性的问题 ...

  8. [转]B+Tree图解

    一,    M阶B+树的定义(M阶是指一个节点最多能拥有的孩子数,M>2): 图1.1 3阶B+树 (1)根结点只有1个,分支数量范围[2,m]. (2)除根以外的非叶子结点,每个结点包含分支数 ...

  9. C#中如何向数组中动态添加元素

    转自:https://blog.csdn.net/qq_35938548/article/details/78325558 背景:现需要向数组中循环插入字符串,但C#中的数组是不支持动态添加元素的,只 ...

  10. Dynamically loading unmanaged OCX in C#

    You'll have to perform a number of steps that are normally taken of automatically when you use the t ...