树状数组+主席树,模板题,不多说...

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
#include <iostream>
#include <cstdlib>
using namespace std;
#define N 50005
#define lson l,m,tr[rt].ls
#define rson m+1,r,tr[rt].rs
#define PushUp(rt) tr[rt].siz=tr[tr[rt].ls].siz+tr[tr[rt].rs].siz
struct node
{
int ls,rs,siz;
}tr[N*200];
int rot[N],a[N],n,Q,nx,ny,rx[N],ry[N],cnt;
void insert(int l,int r,int &rt,int v,int c)
{
if(!rt)rt=++cnt;
tr[rt].siz+=c;
if(l==r)return ;
int m=(l+r)>>1;
if(m>=v)insert(lson,v,c);
else insert(rson,v,c);
}
int query_k(int l,int r,int k)
{
if(l==r)return l;
int m=(l+r)>>1,sizls=0;
for(int i=1;i<=nx;i++)sizls-=tr[tr[rx[i]].ls].siz;
//printf("aaa%d %d %d %d\n",l,r,k,sizls);
for(int i=1;i<=ny;i++)sizls+=tr[tr[ry[i]].ls].siz;
//printf("bbb%d %d %d %d\n",l,r,k,sizls);
if(sizls>=k)
{
for(int i=1;i<=nx;i++)rx[i]=tr[rx[i]].ls;
for(int i=1;i<=ny;i++)ry[i]=tr[ry[i]].ls;
return query_k(l,m,k);
}
for(int i=1;i<=nx;i++)rx[i]=tr[rx[i]].rs;
for(int i=1;i<=ny;i++)ry[i]=tr[ry[i]].rs;
return query_k(m+1,r,k-sizls);
}
int query_x(int l,int r,int x)
{
if(l==r)return 1;
int m=(l+r)>>1,sizls=0;
for(int i=1;i<=nx;i++)sizls-=tr[tr[rx[i]].ls].siz;
for(int i=1;i<=ny;i++)sizls+=tr[tr[ry[i]].ls].siz;
if(m>=x)
{
for(int i=1;i<=nx;i++)rx[i]=tr[rx[i]].ls;
for(int i=1;i<=ny;i++)ry[i]=tr[ry[i]].ls;
return query_x(l,m,x);
}
for(int i=1;i<=nx;i++)rx[i]=tr[rx[i]].rs;
for(int i=1;i<=ny;i++)ry[i]=tr[ry[i]].rs;
return sizls+query_x(m+1,r,x);
}
void pre(int l,int r)
{
nx=ny=0;
for(int i=l;i;i-=(i&(-i)))rx[++nx]=rot[i];
for(int i=r;i;i-=(i&(-i)))ry[++ny]=rot[i];
}
int main()
{
scanf("%d%d",&n,&Q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
for(int j=i;j<=n;j+=j&-j)
{
insert(-1<<30,1<<30,rot[j],a[i],1);
}
}
while(Q--)
{
int op,x,y,z;
scanf("%d%d%d",&op,&x,&y);
if(op!=3)scanf("%d",&z),x--;
if(op==1)
{
pre(x,y);
printf("%d\n",query_x(-1<<30,1<<30,z));
}else if(op==2)
{
pre(x,y);
printf("%d\n",query_k(-1<<30,1<<30,z));
}else if(op==3)
{
for(int i=x;i<=n;i+=i&-i)insert(-1<<30,1<<30,rot[i],a[x],-1);
a[x]=y;
for(int i=x;i<=n;i+=i&-i)insert(-1<<30,1<<30,rot[i],a[x],1);
}else if(op==4)
{
pre(x,y);
int rank=query_x(-1<<30,1<<30,z);
pre(x,y);
printf("%d\n",query_k(-1<<30,1<<30,rank-1));
}else
{
pre(x,y);
int rank=query_x(-1<<30,1<<30,z+1);
pre(x,y);
printf("%d\n",query_k(-1<<30,1<<30,rank));
}
}
return 0;
}

  

二逼平衡树 Tyvj 1730 BZOJ3196 Loj#106的更多相关文章

  1. bzoj3196: Tyvj 1730 二逼平衡树 树套树

    地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3196 题目: 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec ...

  2. bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1807  Solved: 772[Submit][Stat ...

  3. BZOJ 3196: Tyvj 1730 二逼平衡树( 树套树 )

    这道题做法应该很多吧.... 我用了线段树套treap.... -------------------------------------------------------------------- ...

  4. bzoj 3196/ Tyvj 1730 二逼平衡树 (线段树套平衡树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description ...

  5. bzoj 3196: Tyvj 1730 二逼平衡树

    #include<cstdio> #include<ctime> #include<cstdlib> #include<iostream> #defin ...

  6. [Tyvj 1730] 二逼平衡树

    先来一发题面QwQ [TYVJ1730]二逼平衡树 Time Limit:2 s   Memory Limit:512 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...

  7. 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2271  Solved: 935[Submit][Stat ...

  8. bzoj 3196 && luogu 3380 JoyOI 1730 二逼平衡树 (线段树套Treap)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3196 题面; 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Se ...

  9. 洛谷 P3380 bzoj3196 Tyvj1730 【模板】二逼平衡树(树套树)

    [模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在 ...

随机推荐

  1. 移动端 slide拖拽

    <html> <head> <meta charset="UTF-8"> <meta name="viewport" ...

  2. 排序算法入门之冒泡排序及其优化(java实现)

    冒泡排序思想(从小到大): 比较相邻两个元素,如果第一个元素比第二个元素大,就交换他们的位置.第一趟,从第一个元素开始,第一个元素和第二个元素比较,如果第一个元素比第二个元素大,则交换位置:接下来比较 ...

  3. Eclipse RCP中超长任务单线程,异步线程处理

    转自:http://www.blogjava.net/mydearvivian/articles/246028.html 在RCP程序中,常碰到某个线程执行时间比较很长的情况,若处理不好,用户体验度是 ...

  4. HashMap 实现原理

    深入Java集合学习系列:HashMap的实现原理   参考文献 引用文献:深入Java集合学习系列:HashMap的实现原理,大部分参考这篇博客,只对其中进行稍微修改 自己曾经写过的:Hashmap ...

  5. JAVA设计模式--学习总结(序)

    设计模式(Design pattern)是一套被反复使用的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 常见的设计模式有23种.分为三大类:创建型模式, ...

  6. Apache Flink Quickstart

    Apache Flink 是新一代的基于 Kappa 架构的流处理框架,近期底层部署结构基于 FLIP-6 做了大规模的调整,我们来看一下在新的版本(1.6-SNAPSHOT)下怎样从源码快速编译执行 ...

  7. Day12 前端html

    前端基础之HTML 老师博客: http://www.cnblogs.com/yuanchenqi/articles/6835654.html http://www.cnblogs.com/yuanc ...

  8. python---面向对象高级进阶

    静态方法,调用静态方法后,该方法将无法访问类变量和实例变量 class Dog(object): def __init__(self,name): self.name = name def eat(s ...

  9. vfd折腾(一)

    从一开始驱动一块翻出来的液晶显示屏就想做一个电子时钟,偶然翻到了vfd(Vacuum Fluorescent Display的缩写,意为真空荧光显示屏). 此后就走上了不归路

  10. remove the nth node from the end of the list

    problem description: remove the nth node from the end of the list for example: given: 1->2->3 ...