怕是还没有题解,所以先写一篇。

这题就是维护带修改的主席树。首先树套树肯定是能做的,既然树套树能做那么整体二分肯定也是可以的。

由于我并没有使用这两种做法,所以此处不予介绍。

大概描述下主席树的思路:

首先说说怎么搞带修改主席树?

回忆一般的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(主席树+树状数组)相关推荐

  1. P2617 Dynamic Rankings(带修改主席树)

    P2617 Dynamic Rankings 带修改主席树 能进行对序列中数进行修改 #include<iostream> #include<string.h> #includ ...

  2. P2617 Dynamic Rankings(整体二分)

    P2617 Dynamic Rankings 题意: 待修改的区间最值问题 题解: 整体二分天然带有修改性 整体二分做不带修改的区间最值->看这里 现在待修改,我们可以将第l位修改为x,因为我们 ...

  3. 洛谷 - P2617 Dynamic Rankings(树状数组套主席树)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,再给出 m 次操作: Q l r k:返回区间 [ l , r ] 内第 k 大的数 C x y:令 a[ x ] = y 题目分析:其实 ...

  4. Bzoj 1901: Zju2112 Dynamic Rankings 主席树,可持久,树状数组,离散化

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 6321  Solved: 2628 [ ...

  5. bzoj 1901: Zju2112 Dynamic Rankings(离线树状数组+主席树)

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 8144  Solved: 3378 [ ...

  6. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大

    题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax​为yyy 解题思路: 首先我们知道权值线段树是 ...

  7. P2617 Dynamic Rankings(带修主席树)

    所谓带修主席树,就是用树状数组的方法维护主席树的前缀和 思路 带修主席树的板子 注意数据范围显然要离散化即可 代码 #include <cstdio> #include <cstri ...

  8. P2617 Dynamic Rankings 动态主席树

    \(\color{#0066ff}{ 题目描述 }\) 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i ...

  9. BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6058 Solved: 2521 [Su ...

最新文章

  1. Mongodb 4.0+安装
  2. USB无法识别原因分析及解决方案
  3. Python用selenium获取cookie以后给rqeuests使用。
  4. padding和卷积的区别_池化、池化与卷积异同、zero-padding
  5. 苹果手机看python文件大小_Python练习题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于iPhone5分辨率的大小...
  6. python实战讲解_Python数据可视化实战讲解
  7. idea 新增html页面或者是修改html文件后,target不会同步更新
  8. 物联网 毕业设计——方案选择
  9. Arno,第一个NFV开源平台
  10. 曾维沛云推广:全网落地营销为广西南宁企业带来精准客户订单
  11. PDF怎么转换成jpg图片
  12. ANO匿名上位机V7协议STM32
  13. gulp : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\gulp.ps1
  14. jsf 教学_JSF初学者教程
  15. MySQL批量修改表的编码和字符集
  16. 他是学计算机的这个句子中宾语是动词性的,语法一实词(教师)2017级
  17. 《生命不息,折腾不止》 罗永浩著
  18. GLADE3教程(一)
  19. JVM调优总结(十)-调优方法
  20. 2021BTAJ面试真题详解,kafka查看topic数据内容

热门文章

  1. redis 介绍和常用命令
  2. THINKPHP中使用swoole
  3. hdu5024-Wang Xifeng's Little Plot
  4. 设计模式--6大原则--迪米特法则
  5. 修改折半查找算法进行范围查找
  6. 再谈Js定义变量,你不得不踩的那些坑
  7. 内存分配(malloc()和free())
  8. python练习题-day2
  9. SpringBoot--springboot启动类和controller的配置
  10. 决策树学习笔记整理【转】