BZOJ1901——Zju2112 Dynamic Rankings
1、题目大意:区间第k小,有单点修改
2、分析:这个是树状数组套线段树,也是主席树。。。。为什么主席树这么多QAQ
就是树套树的那种插入什么的,注意啊,一定要动态开内存。。不然会爆。。
然后算答案有两种算法,一种是二分答案,然后算一下,另一种就是把logn棵线段树的指针都存一下,
然后再递归找第k大的时候,我们就可以暴力枚举这些指针,别忘了维护他们
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
struct segment{
segment *ls, *rs;
int num;
} *root[10010], ft[11000010];
int cnt;
int a[10010];
int n, m;
inline void tree_insert(segment* &p, int l, int r, int value){
if(p == NULL) p = &ft[cnt ++];
if(l == r){
p -> num ++;
return;
}
int mid = (l + r) / 2;
if(value <= mid) tree_insert(p -> ls, l, mid, value);
else tree_insert(p -> rs, mid + 1, r, value);
p -> num = 0;
if(p -> ls) p -> num += p -> ls -> num;
if(p -> rs) p -> num += p -> rs -> num;
}
inline void tree_Delete(segment* &p, int l, int r, int value){
if(p == NULL) p = &ft[cnt ++];
if(l == r){
p -> num --;
return;
}
int mid = (l + r) / 2;
if(value <= mid) tree_Delete(p -> ls, l, mid, value);
else tree_Delete(p -> rs, mid + 1, r, value);
p -> num = 0;
if(p -> ls) p -> num += p -> ls -> num;
if(p -> rs) p -> num += p -> rs -> num;
}
inline int tree_lessk(segment* &p, int l, int r, int value){
if(!p) return 0;
if(l == r) return p -> num;
int mid = (l + r) / 2;
int ret = 0;
if(value <= mid) ret += tree_lessk(p -> ls, l, mid, value);
else {
if(p -> ls) ret += p -> ls -> num;
ret += tree_lessk(p -> rs, mid + 1, r, value);
}
return ret;
}
inline void insert(int x, int y){
for(; x <= n; x += (x & -x))
tree_insert(root[x], 0, 1000000000, y);
}
inline void Delete(int x, int y){
for(; x <= n; x += (x & -x))
tree_Delete(root[x], 0, 1000000000, y);
}
inline int lessk(int x, int y){
int ret = 0;
for(; x > 0; x -= (x & -x))
ret += tree_lessk(root[x], 0, 1000000000, y);
return ret;
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i ++){
scanf("%d", &a[i]);
insert(i, a[i]);
}
char str[2];
int x, y, z;
for(int i = 1; i <= m; i ++){
scanf("%s", str);
scanf("%d%d", &x, &y);
if(str[0] == 'Q'){
scanf("%d", &z);
int l = 0, r = 1000000000;
while(l < r){
int mid = (l + r) / 2;
if(lessk(y, mid) - lessk(x - 1, mid) >= z) r = mid;
else l = mid + 1;
}
printf("%d\n", l);
}
else{
Delete(x, a[x]);
a[x] = y;
insert(x, a[x]);
}
}
return 0;
}
BZOJ1901——Zju2112 Dynamic Rankings的更多相关文章
- [BZOJ1901]Zju2112 Dynamic Rankings
[BZOJ1901]Zju2112 Dynamic Rankings 试题描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i ...
- BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6058 Solved: 2521 [Su ...
- 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings
谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...
- BZOJ1901 Zju2112 Dynamic Rankings 主席树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1901 题意概括 给你一段序列(n个数),让你支持一些操作(共m次), 有两种操作,一种是询问区间第 ...
- [luogu2617][bzoj1901][Zju2112]Dynamic Rankings【树套树+树状数组+主席树】
题目网址 [传送门] 题目大意 请你设计一个数据结构,支持单点修改,区间查询排名k. 感想(以下省略脏话inf个字) 真的强力吹爆洛谷数据,一般的树套树还给我T了一般的点,加强的待修主席树还给我卡了几 ...
- bzoj1901: Zju2112 Dynamic Rankings(BIT套主席树)
带修改的题主席树不记录前缀,只记录单点,用BIT统计前缀. 对于BIT上每一个点建一棵主席树,修改和询问的时候用BIT跑,在主席树上做就行了. 3k4人AC的题#256...应该不算慢 #incl ...
- 【分块】bzoj1901 Zju2112 Dynamic Rankings
区间k大,分块大法好,每个区间内存储一个有序表. 二分答案,统计在区间内小于二分到的答案的值的个数,在每个整块内二分.零散的暴力即可. 还是说∵有二分操作,∴每个块的大小定为sqrt(n*log2(n ...
- 【函数式权值分块】【分块】bzoj1901 Zju2112 Dynamic Rankings
论某O(n*sqrt(n))的带修改区间k大值算法. 首先对序列分块,分成sqrt(n)块. 然后对权值分块,共维护sqrt(n)个权值分块,对于权值分块T[i],存储了序列分块的前i块的权值情况. ...
- 【基数排序】bzoj1901 Zju2112 Dynamic Rankings
论NOIP级别的n²算法…… 跟分块比起来,理论上十万的数据只慢4.5倍左右的样子…… #include<cstdio> #include<algorithm> using n ...
随机推荐
- Python ValueError: IO operation on closed file
ValueError IO operation on closed file表示处理了已经被关闭的数据,在python 中 with语句的上下文会帮助处理,也就是说,当python的处理代码不对齐的时 ...
- zabbix 安装
php+nginx+mysql+zabbix 官方https://www.zabbix.com/documentation/3.0/manual/installation/install 1.安装依赖 ...
- CSS3中的animation动画
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- js切换实现背景颜色
<script type="text/javascript"> obj=document.getElementsByTagName('h1'); ;i<obj.l ...
- CS架构和BS架构的区别
C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势. ...
- JavaWeb学习笔记——JavaEE基础知识
- JavaWeb学习笔记——开发动态WEB资源(六)ServletConfig和ServletContext
1.只有在第一次请求服务器产生实例的时候才会调用init()方法,有一种办法能在服务器一启动的时候就加载init()方法. 即服务器启动即加载Servlet,且按数字大小顺序实例化Servlet. 方 ...
- winSocket数据传输
服务器端: #include <WINSOCK2.H> #include <stdio.h> #pragma comment(lib,"ws2_32.lib" ...
- Why is applicationhost.config still being added to source control even thought it's in gitignore
Why is applicationhost.config still being added to source control even thought it's in gitignore g ...
- jQuery -- is() 方法
定义和用法: 根据选择器.DOM元素或 jQuery 对象来检测匹配元素集合,如果其中至少有一个元素符合这个给定的表达式就返回true.如果没有元素符合,或者表达式无效,都返回'false'. ''' ...