ZOJ2112 BZOJ1901 Dynamic Rankings 树套树 带修改的区间第k小
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小的更多相关文章
- ZOJ 2112 Dynamic Rankings(带修改的区间第K大,分块+二分搜索+二分答案)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- [主席树]ZOJ2112 && BZOJ1901 Dynamic Rankings
题意:n个数,q个询问 (n<=50000, q<=10000) Q x y z 代表询问[x, y]区间里的第z小的数 C x y 代表将(从左往右数)第x个数变成y 上篇介绍了在 ...
- 少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小
少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小 有一道题(BZOJ 1901)是这样的:n个数,m个询问,询问有两种:修改某个数/询问区间第k小. 不带修改的区间第k小用主席树很好写 ...
- 【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 ...
- bzoj 1901: Zju2112 Dynamic Rankings(树套树)
1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...
- ZOJ -2112 Dynamic Rankings 主席树 待修改的区间第K大
Dynamic Rankings 带修改的区间第K大其实就是先和静态区间第K大的操作一样.先建立一颗主席树, 然后再在树状数组的每一个节点开线段树(其实也是主席树,共用节点), 每次修改的时候都按照树 ...
- 区间第K小——可持久化线段树模板
概念 可持久化线段树又叫主席树,之所以叫主席树是因为这东西是fotile主席创建出来的. 可持久化数据结构思想,就是保留整个操作的历史,即,对一个线段树进行操作之后,保留访问操作前的线段树的能力. 最 ...
- [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- ZOJ2112 Dynamic Rankings (线段树套平衡树)(主席树)
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...
随机推荐
- 差分约束系统+输出路径(I - Advertisement POJ - 1752 )
题目链接:https://cn.vjudge.net/contest/276233#problem/I 题目大意:输入k和n,然后输入n行,每一次输入两个数,代表开端和结尾,如果这个区间内点的个数大于 ...
- 富文本存储型XSS的模糊测试之道
富文本存储型XSS的模糊测试之道 凭借黑吧安全网漏洞报告平台的公开案例数据,我们足以管中窥豹,跨站脚本漏洞(Cross-site Script)仍是不少企业在业务安全风险排查和修复过程中需要对抗的“大 ...
- Hibernate5笔记5--关联关系映射
关联关系映射: 关联关系,是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系.实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键,即,使 ...
- wamp中mysql安装时能启动,重启后无法启动的解决办法
第一次安装wamp之后,所有服务可以正常使用,但是重启之后wamp的图标就变成黄色的了,重装了也这样 查看一下错误日志: 日志显示的错误是这样的: 日志提示可能是3306端口被占用的错误,那来看一下是 ...
- 连续的if语句
use_relu=0 use_tanh=2 a = 2 if use_relu else (1 if use_tanh else 0)#如果use_relu不等于0,则a等于2:如果use_relu等 ...
- Ubuntu server 搭建Git server【转】
转自:http://www.cnblogs.com/candle806/p/4064610.html Ubuntu server 搭建Git server,git相比svn,最主要就是分布式了,每个客 ...
- 十二、springcloud之展示追踪数据 Sleuth+zipkin
一.Zipkin简介 Zipkin是Twitter的一个开源项目,它基于Google Dapper实现.我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的REST API接口来辅助我们 ...
- 02 How to Write Go Code 如何编写go语言代码
How to Write Go Code 如何编写go语言代码 Introduction 介绍 Code organization 组织代码 Overview 概述 Workspaces ...
- Zookeeper原理架构与搭建
一.Zookeeper到底是什么!? 学一个东西,不搞明白他是什么东西,哪还有心情学啊!! 首先,Zookeeper是Apache的一个java项目,属于Hadoop系统,扮演管理员的角色. 然后看到 ...
- Python线程和进程
一.进程 程序并不能单独和运行只有将程序装载到内存中,系统为他分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别在于:程序是指令的集合,它是进程的静态描述文本:进程是程序的一次执行活动, ...