http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112

树套树,线段树套splay或者主席树套树状数组,我抄了一下hzwer的代码在zoj上过不了因为zoj的数据比较大不能像hzwer那种写法一样写成nlognlogn的空间。

没有bzoj权限号也不想再写一遍,随便放个代码在这里好惹。

https://www.cnblogs.com/kuangbin/p/3308118.html  <-----这个写法的空间复杂度可以过(就是把树状数组放到外面直接搞),所以ctm我为什么抄hzwer的代码。

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
const int maxn=;
using namespace std;
char s[]={}; int n,m;
int val[maxn]={},a[maxn]={},b[maxn]={},k[maxn]={};
int num[maxn*]={},tot=,flag[maxn]={};
int sum[maxn*],lc[maxn*],rc[maxn*];
int rt[maxn]={},siz=;
int ll[maxn]={},rr[maxn]={},xx,yy;
void build(int l,int r,int las,int &rot,int z,int v){
rot=++siz; sum[rot]=sum[las]+v; lc[rot]=lc[las]; rc[rot]=rc[las];
if(l==r)return;
int mid=(l+r)/;
if(z<=mid)build(l,mid,lc[las],lc[rot],z,v);
else build(mid+,r,rc[las],rc[rot],z,v);
}
int query(int l,int r,int z){
if(l==r)return l;
int suml=,sumr=;
for(int i=;i<=xx;i++)suml+=sum[lc[ll[i]]];
for(int i=;i<=yy;i++)sumr+=sum[lc[rr[i]]];
int mid=(l+r)/;
if(sumr-suml>=z){
for(int i=;i<=xx;i++)ll[i]=lc[ll[i]];
for(int i=;i<=yy;i++)rr[i]=lc[rr[i]];
return query(l,mid,z);
}
else{
for(int i=;i<=xx;i++)ll[i]=rc[ll[i]];
for(int i=;i<=yy;i++)rr[i]=rc[rr[i]];
return query(mid+,r,z-(sumr-suml));
}
}
int main(){
int T;scanf("%d",&T);
while(T-->){
scanf("%d%d",&n,&m);
tot=;siz=;
memset(rt,,sizeof(rt));memset(sum,,sizeof(sum));
memset(rc,,sizeof(rc));memset(lc,,sizeof(lc));
memset(flag,,sizeof(flag));
for(int i=;i<=n;i++){scanf("%d",&val[i]);num[++tot]=val[i];}
for(int i=;i<=m;i++){
scanf("%s",s);scanf("%d%d",&a[i],&b[i]);
if(s[]=='C')num[++tot]=b[i];
else{scanf("%d",&k[i]);flag[i]=;}
}
sort(num+,num+tot+);
tot=unique(num+,num+tot+)-num-;
for(int i=;i<=n;i++){
val[i]=lower_bound(num+,num++tot,val[i])-num;
for(int j=i;j<=n;j+=(j&-j))
build(,tot,rt[j],rt[j],val[i],);
}
for(int i=;i<=m;i++){
if(flag[i]){
xx=;yy=;a[i]--;//cout<<a[i]<<b[i]<<endl;
for(int j=a[i];j;j-=(j&-j))ll[++xx]=rt[j];
for(int j=b[i];j;j-=(j&-j))rr[++yy]=rt[j];
printf("%d\n",num[query(,tot,k[i])]);
}
else{
for(int j=a[i];j<=n;j+=(j&-j))build(,tot,rt[j],rt[j],val[a[i]],-);
val[a[i]]=lower_bound(num+,num++tot,b[i])-num;
for(int j=a[i];j<=n;j+=(j&-j))build(,tot,rt[j],rt[j],val[a[i]],);
}
}
}
return ;
}

并无软用的代码,嘻嘻

所以直接找可持久化线段树的题好了,找主席树出来的都是什么jb。

ZOJ2112 BZOJ1901 Dynamic Rankings 树套树 带修改的区间第k小的更多相关文章

  1. ZOJ 2112 Dynamic Rankings(带修改的区间第K大,分块+二分搜索+二分答案)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  2. [主席树]ZOJ2112 && BZOJ1901 Dynamic Rankings

    题意:n个数,q个询问 (n<=50000, q<=10000) Q x y z 代表询问[x, y]区间里的第z小的数 C x y    代表将(从左往右数)第x个数变成y 上篇介绍了在 ...

  3. 少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小

    少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小 有一道题(BZOJ 1901)是这样的:n个数,m个询问,询问有两种:修改某个数/询问区间第k小. 不带修改的区间第k小用主席树很好写 ...

  4. 【BZOJ1901】 Zju2112 Dynamic Rankings(树套树)

    [题意] 给定一个含有n个数的序列a[1],a[2],a[3]--a[n], 程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[j]中第k小的数是多少(1≤k ...

  5. bzoj 1901: Zju2112 Dynamic Rankings(树套树)

    1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...

  6. ZOJ -2112 Dynamic Rankings 主席树 待修改的区间第K大

    Dynamic Rankings 带修改的区间第K大其实就是先和静态区间第K大的操作一样.先建立一颗主席树, 然后再在树状数组的每一个节点开线段树(其实也是主席树,共用节点), 每次修改的时候都按照树 ...

  7. 区间第K小——可持久化线段树模板

    概念 可持久化线段树又叫主席树,之所以叫主席树是因为这东西是fotile主席创建出来的. 可持久化数据结构思想,就是保留整个操作的历史,即,对一个线段树进行操作之后,保留访问操作前的线段树的能力. 最 ...

  8. [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  9. ZOJ2112 Dynamic Rankings (线段树套平衡树)(主席树)

    The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...

随机推荐

  1. Oracle03--子查询

    1. 子查询 子查询也称之为嵌套子句查询. 1.1. 语法 语法上的运行使用规则: l 子查询 (内查询.嵌套子句) 在主查询之前一次执行完成.(子查询先执行) l 子查询的结果被主查询使用 (外查询 ...

  2. Android选择头像

    http://www.jianshu.com/p/8b3e78046c1c 注意:在Android6.0之后,使用相机拍照需要权限 在选择头像使用相机拍摄时添加以下代码即可. Acp.getInsta ...

  3. weblogica 目录结构 简单介绍 创建domain domain所在目录

    1. samples 创建过程略过 domain的目录 [weblogic@node2 base_domain]$ pwd /home/weblogic/Oracle/Middleware/Oracl ...

  4. ActiveMQ实现消息的发送与接受

    activemq是apache的一个JMS接口的实现产品,java中定义了JMS规范,虽然RocketMQ,kafka现在比较火,但是还是建议先学一下activeMQ再学其他两个就容易很多 首先可以下 ...

  5. 【FCS NOI2018】福建省冬摸鱼笔记 day5

    第五天,也是讲课的最后一天. 数据结构专题,讲师:杨志灿 他的blog我似乎找不到了……以前肯定是在百度博客里面.但是现在百度博客消失了. PPT做的很有感觉,说了很多实用的技巧. 我觉得其实是收获最 ...

  6. 如何用Percona XtraBackup进行MySQL从库的单表备份和恢复【转】

    前提 应该确定采用的是单表一个表空间,否则不支持单表的备份与恢复. 在配置文件里边的mysqld段加上 innodb_file_per_table = 1 环境说明: 主库:192.168.0.1 从 ...

  7. httpd功能配置之虚拟主机【转】

    apache默认使用80端口提供服务,使用主服务器配置的话,一台物理机只能提供一个站点服务:可以使用虚拟主机方式提供不同的访问,以实现一台主机提供多站点服务. 虚拟主机的实现方式有三种:基于端口.基于 ...

  8. Django-模板语言和过滤器

    Django模板语言 首先模板只是一个文本文件,它可以生成任何基于文本的格式(HTML.XML.CSS等),模板中包含变量,在模板被渲染的时候替换为最终的值,以及控制模板逻辑的标签. 变量使用{{ 变 ...

  9. geoserver 启动闪退

    跟JDK版本有关: 比如geoserver2.11需要JDK版本为JDK1.8 windows配置两个jdk环境: 网上有方法,但如果只需要满足geoserver的话,可以只安装jdk(注意jdk和j ...

  10. Python3 出现'ascii' codec can't encode characters问题

    当使用urllib.request.urlopen打开包含中文的链接时报错: from urllib import request url = 'https://baike.baidu.com/ite ...