P2617 Dynamic Rankings(带修改主席树)
P2617 Dynamic Rankings
带修改主席树
能进行对序列中数进行修改
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<stack>
#include<map>
using namespace std;
#define ll long long
const int mx=2e5+7;
int m,n,a[mx],b[mx];
struct ZXtree{int rt[mx],lc[mx<<9],rc[mx<<9],sz[mx<<9]; rt根节点,sz 序列中某个数的个数int node_sz,lnum[mx],rnum[mx],lsz,rsz;void init(){node_sz=0;lsz=rsz=0;}void add(int &o,int l,int r,int k,int num){if(!o) o=++node_sz;sz[o]+=num;if(l==r) return;int mid=(l+r)>>1;if(k<=mid) add(lc[o],l,mid,k,num);else add(rc[o],mid+1,r,k,num);}void update(int x,int len,int cn){int k=lower_bound(b+1,b+len+1,a[x])-b;while(x<=n){add(rt[x],1,len,k,cn);x+=x&(-x);}}int query(int l,int r,int kth){if(l==r) return l;int sum=0;for(int i=1;i<=rsz;i++) sum+=sz[lc[rnum[i]]];for(int i=1;i<=lsz;i++) sum-=sz[lc[lnum[i]]];int mid=(l+r)>>1;if(kth<=sum){for(int i=1;i<=rsz;i++) rnum[i]=lc[rnum[i]];for(int i=1;i<=lsz;i++) lnum[i]=lc[lnum[i]];return query(l,mid,kth);}else{for(int i=1;i<=rsz;i++) rnum[i]=rc[rnum[i]];for(int i=1;i<=lsz;i++) lnum[i]=rc[lnum[i]];return query(mid+1,r,kth-sum);}}
}zxt;
struct node{char c;int l,r;int k;
}ts[mx];int main()
{int cnt=0;cin>>n>>m;for(int i=1;i<=n;i++){scanf("%d",&a[i]);b[i]=a[i];}cnt=n;for(int i=1;i<=m;i++){scanf(" %c%d%d",&ts[i].c,&ts[i].l,&ts[i].r);if(ts[i].c=='Q') scanf("%d",&ts[i].k);else b[++cnt]=ts[i].r;}sort(b+1,b+cnt+1);cnt=unique(b+1,b+cnt+1)-b-1;zxt.init();for(int i=1;i<=n;i++) zxt.update(i,cnt,1);for(int i=1;i<=m;i++){if(ts[i].c=='C'){zxt.update(ts[i].l,cnt,-1);a[ts[i].l]=ts[i].r;zxt.update(ts[i].l,cnt,1);}else{zxt.lsz=zxt.rsz=0;for(int j=ts[i].l-1;j>0;j-=j&(-j)) zxt.lnum[++zxt.lsz]=zxt.rt[j];for(int j=ts[i].r;j>0;j-=j&(-j)) zxt.rnum[++zxt.rsz]=zxt.rt[j];printf("%d\n",b[zxt.query(1,cnt,ts[i].k)]);}}return 0;
}
P2617 Dynamic Rankings(带修改主席树)相关推荐
- [学习笔记]带修改主席树
1.Dynamic Rankings 区间带修改的第 \(k\) 大需要用带修改主席树. 如果用平常的主席树的效率是多少呢? 查询 \(O(logn)\),暴力修改 \(O(nlogn)\),时间不支 ...
- zoj - 2112 带修改主席树 + 空间优化
ZOJ - 2112 题意:求区间第k小 思路:带修改区间第k小裸题,无修改的主席树是维护一个前缀线段树,每次更新log个节点,用root 和 ls rs作为每颗前缀线段树的根节点和左右子树的索引(相 ...
- Dynamic Rankings——带修改区间第k大
三种做法: 1.整体二分: 二分mid 考虑小于mid的修改的影响 但是大于mid的修改可能会干掉小于mid的一些值 所以额外把一个修改变成一个值的删除和一个值的添加 这样就相互独立了! 整体二分,树 ...
- P2617 Dynamic Rankings(主席树+树状数组)
怕是还没有题解,所以先写一篇. 这题就是维护带修改的主席树.首先树套树肯定是能做的,既然树套树能做那么整体二分肯定也是可以的. 由于我并没有使用这两种做法,所以此处不予介绍. 大概描述下主席树的思路: ...
- P2617 Dynamic Rankings(带修主席树)
所谓带修主席树,就是用树状数组的方法维护主席树的前缀和 思路 带修主席树的板子 注意数据范围显然要离散化即可 代码 #include <cstdio> #include <cstri ...
- 洛谷 - P2617 Dynamic Rankings(树状数组套主席树)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,再给出 m 次操作: Q l r k:返回区间 [ l , r ] 内第 k 大的数 C x y:令 a[ x ] = y 题目分析:其实 ...
- P2617 Dynamic Rankings(整体二分)
P2617 Dynamic Rankings 题意: 待修改的区间最值问题 题解: 整体二分天然带有修改性 整体二分做不带修改的区间最值->看这里 现在待修改,我们可以将第l位修改为x,因为我们 ...
- 洛谷P2617 Dynamic Rankings
带修主席树模板题 主席树的单点修改就是把前缀和(大概)的形式改成用树状数组维护,每个树状数组的元素都套了一个主席树(相当于每个数组的元素root[i]都是主席树,且这个主席树维护了(i - lowbi ...
- 2019年ACM-ICPC - 南昌网络赛I:Yukino With Subinterval【带修主席树】
题目: 2019ICPC南昌网络赛I:Yukino With Subinterval 题意: 给定长度为 N 的数组,有两种操作:(1)单点修改,(2)查询区间[qL,qR]内有多少个不同的段(连续相 ...
最新文章
- 基于matlab的退化图像复原(三)------维纳滤波复原
- 项目需求 | PC VR头戴显示器实时三维坐标(项目经费20万)
- vs2017中报无法打开包括文件: corecrt.h: No such file or directory
- 为什么浮点型运算结果会有误差?
- Test2 unit4
- OpenCV基础篇之读取显示图片
- hibernate session的load和get方法
- 将PDF和Gutenberg文档格式转换为文本:生产中的自然语言处理
- 李洋疯狂C语言之编程实现统计某年某月份的天数
- 如何解决Win10预览版一闪而过的disksnapshot.exe进程?
- obs多推流地址_什么都比不上动手能力,OBS 推流实践小记
- 【渝粤教育】国家开放大学2018年秋季 0221-22T数字电子电路 参考试题
- 【bzoj3514】Codechef MARCH14 GERALD07加强版
- Linux内核相关常见面试题
- 通达信波段王指标公式主图_通达信波段操作主图指标公式
- 增量式解析大型XML文件
- cv::Mat::step step1 elemSize elemSize1介绍
- xiaoxin juju needs help
- 如何准备银行秋招春招?
- repo init 下载代码error.GitError: manifests ls-remote: usage: git ls-remote
热门文章
- 科学计算机怎么解一元一次方程,解一元一次方程“八不要”
- STM32—串口通讯详解
- mac 重置mysql root密码_MAC 重置MySQL root 密码
- uboot 1.1.6 移植8900网卡+tftp
- 网页内嵌lodop控件,部分电脑一直提示未安装
- 又到年底冲刺时,华为小米竞相降价促销
- IPUS SQPI PSRAM为STM32单片机提供RAM扩展方案
- 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(图像处理)
- DZY Loves Math 系列详细题解
- Win10系统磁盘扩展分区与恢复分区