[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 ...
随机推荐
- 开源的PaaS方案:在OpenStack上部署CloudFoundry (三)部署BOSH
BOSH是CloudFoundry提供的用来安装部署和升级CloudFoundry的自动化工具,可是说是CloudFoundry的一部分.总体来说,BOSH是Client/Server结构, BOSH ...
- LeetCode - Delete Duplicate Emails
Discription:Write a SQL query to delete all duplicate email entries in a table named Person, keeping ...
- 从TCP三次握手说起--浅析TCP协议中的疑难杂症(1)
版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/73 来源:腾云阁 https://www.qclou ...
- OLE工具套件分析OFFICE宏恶意样本
零.绪论:OLE工具套件的介绍 OLE工具套件是一款针对OFFICE文档开发的具有强大分析功能一组工具集.这里主要介绍基于Python2.7的OLEtools的安装和使用. (1)Python版本需求 ...
- Linux Netfilter注册钩子点
注册钩子点首先要包含响应的头文件,因为这应该已经属于对kernel的编程了. #include <linux/module.h> #include <linux/kernel.h&g ...
- sort排序和uniq统计命令
author:headsen chen date: 2018-08-13 11:08:09 1,sort:排序的功能,默认安装ASCII码来排序,-n 安装数值排,-r 按照倒序来排 [root@b ...
- AB压力测试工具
1.安装AB工具: yum install httpd-tools 2.测试: ab -n -c http://localhost.com/ 其中-n表示请求数,-c表示并发数 3.测试结果 [roo ...
- springMVC各个包下的作用
spring的jar各包作用spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下 ...
- 华硕蓝光刻录机在MAC系统里能用吗?
答案是刻录功能不能用(没有驱动),但可以当外置光驱用.需要注意的是单单把刻录机插到MAC电脑上是没有反应的,放入光盘后Finder里会出现一个可移动设备.
- linux漏洞扫描工具【lynis】
Lynis是一款Unix系统的安全审计以及加固工具,能够进行深层次的安全扫描,其目的是检测潜在的时间并对未来的系统加固提供建议.这款软件会扫描一般系统信息,脆弱软件包以及潜在的错误配置. 特征: 漏洞 ...