P2617 Dynamic Rankings(主席树+树状数组)
怕是还没有题解,所以先写一篇。
这题就是维护带修改的主席树。首先树套树肯定是能做的,既然树套树能做那么整体二分肯定也是可以的。
由于我并没有使用这两种做法,所以此处不予介绍。
大概描述下主席树的思路:
首先说说怎么搞带修改主席树?
回忆一般的kth问题,我们的主席树求的是前缀和,这样我们在目标区间的左右端点的主席树差分下就能求出kth。
那么我们如何支持修改操作?
考虑到我们之前使用主席树朴素的维护区间前缀和,支持修改的话,只要把前缀和交给擅长它的树状数组维护,主席树只要维护下位置就好。
1 #include"bits/stdc++.h" 2 using namespace std; 3 #define nn 40000000 4 #define lowbit(x) ((x)&(-x)) 5 6 int rt[nn],b[nn],a[nn],ca[nn],cb[nn],cc[nn] ; 7 int size[nn],xx[nn],yy[nn],l[nn],r[nn]; 8 int n,m; 9 int totn; 10 int tot,totx,toty; 11 12 inline int read(){ 13 int f=1,x=0;char ch; 14 do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9'); 15 do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9'); 16 return f*x; 17 } 18 19 20 void change(int &y,int x,int L,int R,int pos,int v) 21 { 22 y=++tot; size[tot]=size[x]+v,l[tot]=l[x],r[tot]=r[x]; 23 if (L==R)return ; 24 int mid = R+L>>1;if (pos<=mid)change(l[tot],l[x],L,mid,pos,v); 25 else change(r[tot],r[x],mid+1,R,pos,v); 26 } 27 28 inline void add(int x,int v) 29 { 30 int k = lower_bound(b+1,b+1+totn,a[x])-b; 31 for (int i=x;i<=n;i+=lowbit(i)) change(rt[i],rt[i],1,totn,k,v); 32 } 33 34 int query(int L,int R,int p) 35 { 36 if (L==R)return R; int sum=0; int mid = L+R>>1; 37 for (int i=1;i<=totx;i++)sum-=size[l[xx[i]]]; 38 for (int i=1;i<=toty;i++)sum+=size[l[yy[i]]]; 39 if (p<=sum) 40 { 41 for ( int i=1;i<=totx;i++)xx[i]=l[xx[i]]; 42 for ( int i=1;i<=toty;i++)yy[i]=l[yy[i]]; 43 return query(L,mid,p); 44 } 45 for ( int i=1;i<=totx;i++)xx[i]=r[xx[i]]; 46 for ( int i=1;i<=toty;i++)yy[i]=r[yy[i]]; 47 return query(mid+1,R,p-sum); 48 } 49 50 int main() 51 { char s; 52 n=read(),m=read(); 53 for (int i=1;i<=n;i++)a[i]=read(),b[++totn]=a[i]; 54 55 for (int i=1;i<=m;i++) 56 { 57 cin>>s; if (s=='Q') ca[i]=read(),cb[i]=read(),cc[i]=read(); 58 else ca[i]=read(),cb[i]=read(),b[++totn]=cb[i]; 59 } 60 sort(b+1,b+1+totn); 61 totn=unique(b+1,b+1+totn)-b-1; 62 63 for ( int i=1;i<=n;i++) add(i,1); 64 for ( int i=1;i<=m;i++) 65 { 66 if (cc[i]) 67 { totx=toty=0; 68 for ( int j=ca[i]-1;j;j-=lowbit(j))xx[++totx]=rt[j]; 69 for ( int j=cb[i];j;j-=lowbit(j))yy[++toty]=rt[j]; 70 printf("%d\n",b[query(1,totn,cc[i])]); 71 } 72 else 73 { 74 add(ca[i],-1),a[ca[i]]=cb[i],add(ca[i],1); 75 } 76 } 77 78 }
转载于:https://www.cnblogs.com/zhangbuang/p/10294155.html
P2617 Dynamic Rankings(主席树+树状数组)相关推荐
- P2617 Dynamic Rankings(带修改主席树)
P2617 Dynamic Rankings 带修改主席树 能进行对序列中数进行修改 #include<iostream> #include<string.h> #includ ...
- P2617 Dynamic Rankings(整体二分)
P2617 Dynamic Rankings 题意: 待修改的区间最值问题 题解: 整体二分天然带有修改性 整体二分做不带修改的区间最值->看这里 现在待修改,我们可以将第l位修改为x,因为我们 ...
- 洛谷 - P2617 Dynamic Rankings(树状数组套主席树)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,再给出 m 次操作: Q l r k:返回区间 [ l , r ] 内第 k 大的数 C x y:令 a[ x ] = y 题目分析:其实 ...
- Bzoj 1901: Zju2112 Dynamic Rankings 主席树,可持久,树状数组,离散化
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6321 Solved: 2628 [ ...
- bzoj 1901: Zju2112 Dynamic Rankings(离线树状数组+主席树)
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 8144 Solved: 3378 [ ...
- 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大
题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax为yyy 解题思路: 首先我们知道权值线段树是 ...
- P2617 Dynamic Rankings(带修主席树)
所谓带修主席树,就是用树状数组的方法维护主席树的前缀和 思路 带修主席树的板子 注意数据范围显然要离散化即可 代码 #include <cstdio> #include <cstri ...
- P2617 Dynamic Rankings 动态主席树
\(\color{#0066ff}{ 题目描述 }\) 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i ...
- BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6058 Solved: 2521 [Su ...
最新文章
- Mongodb 4.0+安装
- USB无法识别原因分析及解决方案
- Python用selenium获取cookie以后给rqeuests使用。
- padding和卷积的区别_池化、池化与卷积异同、zero-padding
- 苹果手机看python文件大小_Python练习题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于iPhone5分辨率的大小...
- python实战讲解_Python数据可视化实战讲解
- idea 新增html页面或者是修改html文件后,target不会同步更新
- 物联网 毕业设计——方案选择
- Arno,第一个NFV开源平台
- 曾维沛云推广:全网落地营销为广西南宁企业带来精准客户订单
- PDF怎么转换成jpg图片
- ANO匿名上位机V7协议STM32
- gulp : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\gulp.ps1
- jsf 教学_JSF初学者教程
- MySQL批量修改表的编码和字符集
- 他是学计算机的这个句子中宾语是动词性的,语法一实词(教师)2017级
- 《生命不息,折腾不止》 罗永浩著
- GLADE3教程(一)
- JVM调优总结(十)-调优方法
- 2021BTAJ面试真题详解,kafka查看topic数据内容