[BZOJ1901]Dynamic Rankings
Description
Input
Output
对于每一次询问,你都需要输出他的答案,每一个输出占单独的一行。
Sample Input
3 2 1 4 7
Q 1 4 3
C 2 6
Q 2 5 3
Sample Output
6
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define M 20010
#define ls L[node]
#define rs R[node]
using namespace std;
int n,m,sz,cnt,tx,ty;
int a[M<<],b[M<<],px[M<<],py[M<<],ql[M<<],qr[M<<],qk[M<<];
int rt[M<<],val[M<<],L[M<<],R[M<<];
void insert(int &node,int l,int r,int x,int v) {
if(!node) node=++sz;val[node]+=v;
if(l==r) return;
int mid=(l+r)/;
if(x<=mid) insert(ls,l,mid,x,v);
else insert(rs,mid+,r,x,v);
}
void add(int loc,int v) {
int p=lower_bound(b+,b++cnt,a[loc])-b;
for(int i=loc;i<=n;i+=(i&-i))
insert(rt[i],,cnt,p,v);
}
int query(int l,int r,int k) {
if(l==r) return l;
int sum=,mid=(l+r)/;
for(int i=;i<=tx;i++) sum-=val[L[px[i]]];
for(int i=;i<=ty;i++) sum+=val[L[py[i]]];
if(k<=sum) {
for(int i=;i<=tx;i++) px[i]=L[px[i]];
for(int i=;i<=ty;i++) py[i]=L[py[i]];
return query(l,mid,k);
}
else {
k-=sum;
for(int i=;i<=tx;i++) px[i]=R[px[i]];
for(int i=;i<=ty;i++) py[i]=R[py[i]];
return query(mid+,r,k);
}
}
int main() {
scanf("%d%d",&n,&m);cnt=n;
for(int i=;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];
for(int i=;i<=m;i++) {
char s[];scanf("%s",s);
scanf("%d%d",&ql[i],&qr[i]);
if(s[]=='Q') scanf("%d",&qk[i]);
else b[++cnt]=qr[i];
}
sort(b+,b++cnt);
cnt=unique(b+,b++cnt)-b-;
for(int i=;i<=n;i++) add(i,);
for(int i=;i<=m;i++) {
if(qk[i]) {
tx=ty=;
for(int j=ql[i]-;j;j-=(j&-j)) px[++tx]=rt[j];
for(int j=qr[i];j;j-=(j&-j)) py[++ty]=rt[j];
printf("%d\n",b[query(,cnt,qk[i])]);
}
else {
add(ql[i],-);
a[ql[i]]=qr[i];
add(ql[i],);
}
}
return ;
}
[BZOJ1901]Dynamic Rankings的更多相关文章
- [主席树]ZOJ2112 && BZOJ1901 Dynamic Rankings
题意:n个数,q个询问 (n<=50000, q<=10000) Q x y z 代表询问[x, y]区间里的第z小的数 C x y 代表将(从左往右数)第x个数变成y 上篇介绍了在 ...
- BZOJ1901 - Dynamic Rankings(树状数组套主席树)
题目大意 给定一个有N个数字的序列,然后又m个指令,指令种类只有两种,形式如下: Q l r k 要求你查询区间[l,r]第k小的数是哪个 C i t 要求你把第i个数修改为t 题解 动态的区间第k ...
- ZOJ2112 BZOJ1901 Dynamic Rankings 树套树 带修改的区间第k小
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112 树套树,线段树套splay或者主席树套树状数组,我抄了一下hzwer ...
- BZOJ1901 Dynamic Rankings|带修主席树
题目链接:戳我 其实我并不会做,于是看了题解 我们都知道主席树是利用前缀和记录历史版本来搞区间K大的一种数据结构.不过一般的主席树只能搞定静态区间第K大.如果带修怎么办呢? 想一下...单点修改+区间 ...
- [BZOJ1901]Zju2112 Dynamic Rankings
[BZOJ1901]Zju2112 Dynamic Rankings 试题描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i ...
- 【BZOJ1901】Zju2112 Dynamic Rankings 主席树+树状数组
[BZOJ1901]Zju2112 Dynamic Rankings Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j ...
- bzoj1901&zoj2112&cogs257 Dynamic Rankings(动态排名系统)
bzoj1901&zoj2112&cogs257 Dynamic Rankings(动态排名系统) cogs zoj bzoj-权限 题解 bzoj和zoj都是骗访问量的233,我没有 ...
- [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6058 Solved: 2521 [Su ...
随机推荐
- go http 文件下载
package main import ( "fmt" "net/http" "os" ) func DownFile() { userFi ...
- 解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题
From:http://blog.csdn.net/fancylovejava/article/details/39643449 之前在做 APP 的时候不太关注这个问题,因为自己在使用其他 APP ...
- EditPlus轻量级编辑器配置常用的语法规则!
打开EditPlus编辑器:工具 ---- 参数设置 ---- 文件 ---- 设置&语法: 先配置简单的CSS语法: 勾选下面的 “自动完成” ,加载对应的ACP文件,配置一些常用的语法: ...
- KMP的next数组性质运用
hdu2594 Simpsons' Hidden Talents Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- SQL Server 存储过程生成流水号
SQL Server利用存储过程生成流水号 USE BiddingConfig SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO -- =========== ...
- kubernetes实战(四):k8s持久化安装rabbitmq集群
1.下载文件 https://github.com/dotbalo/k8s/ 2.创建namespace kubectl create namespace public-service 如果不使用pu ...
- Python之traceback错误堆栈信息处理
一.Python中的异常栈跟踪 之前在做Java的时候,异常对象默认就包含stacktrace相关的信息,通过异常对象的相关方法printStackTrace()和getStackTrace()等方法 ...
- 用Python实现的数据结构与算法:双端队列
一.概述 双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的线性数据结构.双端队列也拥有两端:队首(front).队尾(rear),但与队列不同的是,插入操作在两 ...
- JOJ1202。重新操刀ACM,一天一练!做个简单的题目温习。
http://ac.jobdu.com/problem.php?pid=1202 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). ...
- 1.1 、Django 后台
Django 后台 与后台相关文件:每个app中的 admin.py 文件与后台相关. 一,新建一个 名称为 HelloDjango 的项目 django-admin.py startproject ...