[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 ...
随机推荐
- Docker源码分析(二):Docker Client创建与命令执行
1. 前言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖.便捷的软件集成测试与部署之道.在团队开发软件时,Docker可以提供可复用的运行环境.灵活的资源配置. ...
- Docker源码分析(一):Docker架构
1 背景 1.1 Docker简介 Docker是Docker公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议.目前,Docker可以在容器内 ...
- Python语音合成
注意:通过win32com调用的windows的SAPI,所以本脚本只适应于windows平台 代码很简单 #coding:utf-8 import win32com.client import ti ...
- PHP 允许Ajax跨域访问 (Access-Control-Allow-Origin)
Ajax访问php,报错 php顶部加上即可: header("Access-Control-Allow-Origin: *");
- 什么是真正的APM?
近年来APM行业被越来越多的企业所关注,尤其是在2014年末,NewRelic的成功上市,更加激发了人们对这个行业前景的无限遐想.那么究竟什么是APM?APM的目的是什么?要求我们做什么?有不少企业对 ...
- 【BZOJ2595】[Wc2008]游览计划 斯坦纳树
[BZOJ2595][Wc2008]游览计划 Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为 ...
- {sharepoint} More on SharePoint 2010 Application Pools
More on SharePoint 2010 Application Pools Print | posted on Friday, December 04, 2009 3:26 PM Blimey ...
- Unity3D 笔记二 3D模型基础
一.3D模型基础 1.Hierarchy 显示的是界面上的游戏对象(GameObject),每个游戏对象都有.至少要有一个Camera,点击Camera就可以在Preview中看到摄像机的视角画面.每 ...
- CentOS中用户不在 sudoers 文件中。此事将被报告。
首先切换为root用户 su root; 然后更改etc/sudoers文件的只读为可读可写可执行. sudo chmod 777 /etc/sudoers 输入visudo命令即可编辑文件,找到ro ...
- oracle日常函数汇总(转载)
第一篇 著名函数之单值函数 注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt表示格式 数值类型函数 数值型函数输入数字型参数并返回数值型的值.多数该类函数的返回值支持38 ...