2018.08.04 洛谷P3380 【模板】二逼平衡树(树套树)
传送门
技不如人,写的权值线段树套线段树在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 【模板】二逼平衡树(树套树)的更多相关文章
- BZOJ3196 & 洛谷3380:二逼平衡树——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3196 https://www.luogu.org/problemnew/show/P3380 (题 ...
- 2018.08.11 洛谷P3224 [HNOI2012]永无乡(线段树合并)
传送门 给出n个带点权的点,支持连边和查询连通块第k大. 这个貌似就是一道线段树合并的裸板啊... 代码: #include<bits/stdc++.h> #define N 100005 ...
- 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 ...
- bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)
3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1807 Solved: 772[Submit][Stat ...
- bzoj 3196/ Tyvj 1730 二逼平衡树 (线段树套平衡树)
3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description ...
- 2018.08.28 洛谷P3803 【模板】多项式乘法(FFT)
传送门 fft模板题. 终于学会fft了. 这个方法真是神奇! 经过试验发现手写的complex快得多啊! 代码: #include<iostream> #include<cstdi ...
- 2018.08.16 洛谷P1437 [HNOI2004]敲砖块(二维dp)
传送门 看起来普通dp" role="presentation" style="position: relative;">dpdp像是有后效性的 ...
- 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]表示 ...
- 2018.11.04 洛谷P1081 开车旅行(倍增)
传送门 思路简单码量超凡? 感觉看完题大家应该都知道是倍增sbsbsb题了吧. 首先预处理出从每个点出发如果是AAA走到哪个点,如果是BBB走到哪个点. 然后利用刚刚预处理出的信息再预处理从每个点出发 ...
随机推荐
- 22 网络编程--TCP和UDP实现聊天例子
1.TCP简单的一次对话,单通信 客户端: import socket HOST = 'localhost' PORT = 50006 client = socket.socket(socket.AF ...
- UI5-文档-4.33-Routing Back and History
现在我们可以导航到细节页面并显示发票,但是还不能回到概览页面.我们将向细节页面添加一个back按钮,并实现一个函数,再次显示概述页面. Preview A back button is now dis ...
- kernel TCP time wait bucket table overflow
# 故障描述 有一个需求是实时分析API接口访问日志,提取token去数据库查询对应的uid,然后收集一些指标存入到hbase中. 当程序执行一会后会被系统杀死 Killed ! # 故障排查 .CP ...
- ibernate 配置数据库方言
在开发hibernate的程序时,需要进行SessionFactory的配置,简单地说,也就是建立与数据库之间连接的配置,在hibernate中一般使用xml文件来进行配置,但是在该文件的 ...
- c#数和二叉树
树(Tree)是 n(n≥0)个相同类型的数据元素的有限集合.树中的数据元素叫结点(Node).n=0 的树称为空树(Empty Tree):对于 n>0 的任意非空树 T 有: (1)有且仅有 ...
- js中定时器之一
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- MySql频繁查询、插入数据
当我们需要频繁地从数据库查询.插入数据时,可以将这些数据库操作汇集写到同一个类里,作为工具类直接调用. 将数据库的具体信息保存在.properties文件中,用log4j作为日志记录 MySql.ja ...
- 第七章 二叉搜索树(b3)BST:删除
- Poor Warehouse Keeper
Poor Warehouse Keeper http://acm.hdu.edu.cn/showproblem.php?pid=4803 Jenny is a warehouse keeper. He ...
- 虚拟机安装Centos6.5服务器系统
前言: 工作需要,研究Linux数日,写下此教程,意在给其他初学者参考学习,亦是给自己留作备用.好记性不如烂笔头,毕竟只是偶尔使用,留下教程,以备不时之需. 对于学习研究Linux的新手,个人推荐VM ...