传送门

技不如人,写的权值线段树套线段树在bzoj上无论如何都卡不过空间。

这是一道树套树简单题,感觉没什么好说的。

直接权值线段树套平衡树就行了。

代码:

#include<bits/stdc++.h>
#define N 200000000
using namespace std;
int n,m,t1,t2,t3,t4;
int siz[30000005],son[30000005][2],intot,outtot,val[8000005],ch[8000005][2],rt[8000005],RT;
inline void pushup_in(int p){siz[p]=siz[son[p][0]]+siz[son[p][1]];}
inline void update_in(int&p,int l,int r,int k,int v){
    if(!p)p=++intot;
    if(l==r){siz[p]+=v;return;}
    int mid=l+r>>1;
    if(k<=mid)update_in(son[p][0],l,mid,k,v);
    else update_in(son[p][1],mid+1,r,k,v);
    pushup_in(p);
}
inline int query_in(int p,int l,int r,int ql,int qr){
    if(ql>r||qr<l)return 0;
    if(ql<=l&&r<=qr)return siz[p];
    int mid=l+r>>1;
    return query_in(son[p][0],l,mid,ql,qr)+query_in(son[p][1],mid+1,r,ql,qr);
}
inline void update_out(int&p,int l,int r,int outk,int ink,int v){
    if(!p)p=++outtot;
    update_in(rt[p],1,n,ink,v);
    if(l==r)return;
    int mid=l+r>>1;
    if(outk<=mid)update_out(ch[p][0],l,mid,outk,ink,v);
    else update_out(ch[p][1],mid+1,r,outk,ink,v);
}
inline int query_out(int p,int l,int r,int oql,int oqr,int iql,int iqr){
    if(oql>r||oqr<l||!p)return 0;
    if(oql<=l&&r<=oqr)return query_in(rt[p],1,n,iql,iqr);
    int mid=l+r>>1;
    return query_out(ch[p][0],l,mid,oql,oqr,iql,iqr)+query_out(ch[p][1],mid+1,r,oql,oqr,iql,iqr);
}
inline int kth(int p,int l,int r,int k,int ql,int qr){
    if(l==r)return l;
    int tmp=query_in(rt[ch[p][0]],1,n,ql,qr),mid=l+r>>1;
    if(tmp>=k)return kth(ch[p][0],l,mid,k,ql,qr);
    return kth(ch[p][1],mid+1,r,k-tmp,ql,qr);
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i){
        scanf("%d",&val[i]);
        update_out(RT,1,N,val[i]+1,i,1);
    }
    while(m--){
        int op,a,b,c;
        scanf("%d%d%d",&op,&a,&b);
        if(op==3){update_out(RT,1,N,val[a]+1,a,-1),update_out(RT,1,N,1+(val[a]=b),a,1);continue;}
        scanf("%d",&c);
        if(op==1){printf("%d\n",query_out(RT,1,N,1,c,a,b)+1);}
        else if(op==2){printf("%d\n",kth(RT,1,N,c,a,b)-1);}
        else if(op==4){
            int tmp=query_out(RT,1,N,1,c,a,b);
            if(tmp)printf("%d\n",kth(RT,1,N,tmp,a,b)-1);
            else puts("-2147483647");
        }
        else if(op==5){
            int tmp=query_out(RT,1,N,1,c+1,a,b)+1;
            if((b-a+1)<tmp)puts("2147483647");
            else printf("%d\n",kth(RT,1,N,tmp,a,b)-1);
        }
    }
    return 0;
}

2018.08.04 洛谷P3380 【模板】二逼平衡树(树套树)的更多相关文章

  1. BZOJ3196 & 洛谷3380:二逼平衡树——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3196 https://www.luogu.org/problemnew/show/P3380 (题 ...

  2. 2018.08.11 洛谷P3224 [HNOI2012]永无乡(线段树合并)

    传送门 给出n个带点权的点,支持连边和查询连通块第k大. 这个貌似就是一道线段树合并的裸板啊... 代码: #include<bits/stdc++.h> #define N 100005 ...

  3. 2018.07.01洛谷P2617 Dynamic Rankings(带修主席树)

    P2617 Dynamic Rankings 题目描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i ...

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

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

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

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

  6. 2018.08.28 洛谷P3803 【模板】多项式乘法(FFT)

    传送门 fft模板题. 终于学会fft了. 这个方法真是神奇! 经过试验发现手写的complex快得多啊! 代码: #include<iostream> #include<cstdi ...

  7. 2018.08.16 洛谷P1437 [HNOI2004]敲砖块(二维dp)

    传送门 看起来普通dp" role="presentation" style="position: relative;">dpdp像是有后效性的 ...

  8. 2018.11.04 洛谷P2679 子串(线性dp)

    传送门 为什么前几年的noipnoipnoip总是出这种送分题啊? 这个直接线性dpdpdp不就完了吗? f[i][j][k][0/1]f[i][j][k][0/1]f[i][j][k][0/1]表示 ...

  9. 2018.11.04 洛谷P1081 开车旅行(倍增)

    传送门 思路简单码量超凡? 感觉看完题大家应该都知道是倍增sbsbsb题了吧. 首先预处理出从每个点出发如果是AAA走到哪个点,如果是BBB走到哪个点. 然后利用刚刚预处理出的信息再预处理从每个点出发 ...

随机推荐

  1. IdUDPServer 收到4次重复的数据

    IdUDPServer1->Send(RemoteIP, LabeledEdit2->Text.ToInt(), InText, IndyTextEncoding_UTF8()); 我发给 ...

  2. 机器学习入门-数值特征-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码) 4.pd.get_dummies(直接对特征进行one-hot编码)

    1.LabelEncoder() # 用于构建数字编码 2 .map(dict_map)  根据dict_map字典进行数字编码的映射 3.OnehotEncoder()  # 进行one-hot编码 ...

  3. spring事务没回滚

    最近遇见一个问题,用spring管理实务,在service层处理数据,保存数据时出现异常,但没有回滚,检查了一下,发现是因为我用try catch将异常进行捕获了,没有抛出导致的:默认spring事务 ...

  4. 超简单,webpack配置

    有看过我的博客的童鞋可能有看到我最近有在利用闲暇时间做一个前后台均涵盖的音乐播放器项目,但是呢,我是一个小小的前端,对后台的了解可以说只停留在很初级的阶段,当然了音乐播放器的音乐列表是后台轮循出来的, ...

  5. 一步步实现 easyui datagrid表格宽度自适应,效果非常好

    一步步实现 easyui datagrid表格宽度自适应,效果非常好: 一.设置公共方法,使得datagrid的属性  fitColumns:true $(function(){ //初始加载,表格宽 ...

  6. CentOS开机卡在进度条,无法正常开机的排查办法

    CentOS开机的时候卡在进度条一直进不去 重启,按f5键进度条/命令行界面方式切换,确认卡问题后处理就好 我这边卡在redis服务,设置为开机启动但是一直服务启动不起来 重启按住"e&qu ...

  7. php 时间操作归类

    对于php时间表示有两种: 一.‘xxxx-xx-xx'这种容易分辨的格式 二.unix时间戳格式 他们的之间的转换关系是: 常规格式转时间戳 $T='2014-05-24'; $Tr=strtoti ...

  8. 安装 neo4j 在 .../bin 目录下使用 ./neo4j 没反应 和 从csv 导入数据到neo4j

    可以使用 /bin/sh ./neo4j start 如果提示:./neo4j: 28: set: Illegal option -o pipefail 那么 ubuntu”set Illegal o ...

  9. Cache Server

    [Cache Server] Whenever a source Asset like a .psd or an .fbx file is modified, Unity detects the ch ...

  10. MySQL语句相关

    一.增加 1.基本 2.集合 3.组合 二.删除 1.基本 2.集合 3.组合 1.一个表的查询结果作为另一个表的插入字段之一 <insert id="方法" paramet ...