BZOJ_1901_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≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改
变后的a继续回答上面的问题。
 
分析:
区间第k小,可以用主席树维护
然而有修改,每次修改都会对后面的线段树有影响
因为一般的主席树是前缀和的思想
不妨用树状数组维护可持久化线段树
查询和修改都乘上个logn
 
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 100500
int t[N*40],ls[N*40],rs[N*40],n,m,root[N*40];
int sx[N],sy[N],v[N],maxn=1000000000,cnt,lx,ly;
char ch[10];
void insert(int x,int &y,int l,int r,int val,int c){
if(!y)y=++cnt;
if(l==r) { t[y] = t[x] + c; return ;}
int mid=l+r>>1;
if(val<=mid) rs[y]=rs[x],insert(ls[x],ls[y],l,mid,val,c);
else ls[y]=ls[x],insert(rs[x],rs[y],mid+1,r,val,c);
t[y] = t[ls[y]] + t[rs[y]];
}
int query(int l,int r,int k){
if(l==r)return l;
int sizls=0,mid=l+r>>1,i;
for(i=1;i<=ly;i++) sizls += t[ls[sy[i]]];
for(i=1;i<=lx;i++) sizls -= t[ls[sx[i]]];
if(k<=sizls){
for(i=1;i<=ly;i++) sy[i]=ls[sy[i]];
for(i=1;i<=lx;i++) sx[i]=ls[sx[i]];
return query(l,mid,k);
}else{
for(i=1;i<=ly;i++) sy[i]=rs[sy[i]];
for(i=1;i<=lx;i++) sx[i]=rs[sx[i]];
return query(mid+1,r,k-sizls);
}
}
int main(){
scanf("%d%d",&n,&m);
int i,x,y,z,tot=n,j,k;
for(i=1;i<=n;i++) { scanf("%d",&v[i]);for(j=i;j<=n;j+=j&(-j))insert(root[j],root[j],0,maxn,v[i],1); }
for(i=1;i<=m;i++) {
scanf("%s%d%d",ch,&x,&y);
if(ch[0]=='C'){
for(j=x;j<=n;j+=j&(-j)) insert(root[j],root[j],0,maxn,v[x],-1);
v[x]=y;
for(j=x;j<=n;j+=j&(-j)) insert(root[j],root[j],0,maxn,v[x],1);
}else{
scanf("%d",&z);
for(lx=0,j=x-1;j;j-=j&(-j)) sx[++lx] = root[j];
for(ly=0,j=y;j;j-=j&(-j)) sy[++ly] = root[j];
printf("%d\n",query(0,maxn,z));
}
}
}
 

BZOJ_1901_Zju2112 Dynamic Rankings_树状数组+主席树的更多相关文章

  1. zoj2112 树状数组+主席树 区间动第k大

    Dynamic Rankings Time Limit: 10000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Subm ...

  2. 【bzoj1146】[CTSC2008]网络管理Network 倍增LCA+dfs序+树状数组+主席树

    题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高 ...

  3. 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树

    题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...

  4. BZOJ_2120_数颜色_Set+树状数组+主席树

    BZOJ_2120_数颜色_Set+树状数组+主席树 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L ...

  5. P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]

    题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...

  6. ZOJ 2112 Dynamic Rankings(树状数组+主席树)

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

  7. [luogu2617][bzoj1901][Zju2112]Dynamic Rankings【树套树+树状数组+主席树】

    题目网址 [传送门] 题目大意 请你设计一个数据结构,支持单点修改,区间查询排名k. 感想(以下省略脏话inf个字) 真的强力吹爆洛谷数据,一般的树套树还给我T了一般的点,加强的待修主席树还给我卡了几 ...

  8. ZOJ 2112 Dynamic Rankings(树状数组+主席树)

    题意 \(n\) 个数,\(m\) 个操作,每次操作修改某个数,或者询问某个区间的第 \(K\) 小值. \(1 \leq n \leq 50000\) \(1 \leq m \leq 10000\) ...

  9. bzoj 1901: Zju2112 Dynamic Rankings【整体二分+树状数组||主席树+树状数组】

    整体二分: 对于每一个修改操作,标记为1,并且加一个标记为-1的这个位置原来值,并且对于a数列每个点都当成修改操作 然后整体二分,扫当前操作区间lr,把在值域区间标记为1和-1的操作都在树状数组对应位 ...

随机推荐

  1. 代码托管工具 git

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  2. NIO 多线程

    本文可看成是对Doug Lea Scalable IO in Java一文的翻译. 当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的 ...

  3. sql server对并发的处理-乐观锁和悲观锁

    https://www.cnblogs.com/dengshaojun/p/3955826.html sql server对并发的处理-乐观锁和悲观锁 假如两个线程同时修改数据库同一条记录,就会导致后 ...

  4. Flask框架之 --- 我的第一个个人网站(雏形)

    现在还是个静态网站 , 而且这里的Flask也只是起到了提供虚拟web服务器的作用  , 下一步是实现数据库的连接 , 实现简单的动态访问.

  5. Github Page 绑定域名

    http://kyle.xlau.org/posts/github-cname.html CNAME 创建一个CNAME文件,内容是你的域名,如: xlau.org 然后把此文件添加到Github仓库 ...

  6. CentOS7安装codeblocks(转载)

    1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可 yum install gccyum install gcc-c++ 2.安装gtk2-devel ...

  7. java使用Myeclipse创建Hibernate项目碰到的诸多问题总结

    这两天一直在搞Myeclipse创建Hibernate的1对多映射. 由于缺乏经验,可算是把我坑惨了.控制台是不停地报错啊~~~~我差点就崩溃了. 1.看的是慕课网的Hibernate一对多映射教程, ...

  8. Python flask中的配置

    当你开始学习Flask时,配置看上去是小菜一碟.你仅仅需要在config.py定义几个变量,然后万事大吉. 然而当你不得不管理一个生产上的应用的配置时,这一切将变得棘手万分. 你不得不设法保护API密 ...

  9. 0513JS数组遍历、内置方法、训练

    一.定义一个数组把其中的偶数取出,组成一个新的数组 var attr = [9,34,80,27,56]; var attr1 = []; for(var i in attr){ if(attr[i] ...

  10. Python_生成大量随机信息

    #coding=utf-8 import random import string import codecs ''' 演示如何使用Python标准库random来生成随机数据,这在需要 ''' #常 ...