P2617 Dynamic Rankings

题意:


待修改的区间最值问题

题解:

整体二分天然带有修改性
整体二分做不带修改的区间最值—>看这里
现在待修改,我们可以将第l位修改为x,因为我们是用树状数组来维护的,所以把这个过程拆分成将第l个数删去,再将第l个数加上,但是这两个第l数所指的值是不一样的,因为我们是判断,只有值<=mid的数才插入到树状数组中,虽然是同一个位置,但是因为可能改了值导致原本插入,现在不插入,也有可能相反,这样就实现了修改操作,其实还是要把整体二分的原理搞清楚就懂了
比如:当然mid = 3
第L位原本是2现在改成4
一开始第L位是插入到树状数组的(因为2<mid)(读入数据时的操作),然后先将第L位删去(修改操作分离出的删去操作),然后判断现在值是否满足要求,发现不满足(4>mid=3),则不插入到树状数组,这样一套,就完成了修改

代码:

#pragma optimize("Ofast")
#include<bits/stdc++.h>
#define MAXN 300005
#define inf int(1e9)
using namespace std;
typedef long long ll;int N,M;
int a[MAXN];struct Node{int op,x,y,k;//op=insert+1/remove-1,query2int id;Node(int op=0, int x=0, int y=0, int k=0, int id=0):op(op), x(x), y(y), k(k), id(id){}
} q[MAXN],lq[MAXN],rq[MAXN];//
int fw[MAXN];
inline int lbt(int x){return x&(-x);
}inline void change(int x, int dv){for(;x<=N;x+=lbt(x)){fw[x] += dv;}
}inline int query(int x){int ans = 0;for(;x>0;x-=lbt(x)){ans += fw[x];}return ans;
}
//
int ANS[MAXN];void solve(int vl, int vr, int ql, int qr){//cerr<<"solve: "<<vl<<" "<<vr<<" "<<ql<<" "<<qr<<endl;if(ql > qr) return;if(vl == vr){for(int i=ql;i<=qr;i++){if(q[i].op==2) ANS[q[i].id] = vl;}return;}//insertint mid = (vl + vr)>>1;int nl = 0, nr = 0;for(int i=ql;i<=qr;i++){if(q[i].op != 2){//insert/removeif(q[i].x <= mid) change(q[i].y, q[i].op), lq[++nl] = q[i];else rq[++nr] = q[i];}else{//queryint n = query(q[i].y) - query(q[i].x-1);if(q[i].k <= n) lq[++nl] = q[i];else{q[i].k -= n;rq[++nr] = q[i];}}}//removefor(int i=ql;i<=qr;i++){if(q[i].op != 2){if(q[i].x <= mid) change(q[i].y, -q[i].op);}}for(int i=1;i<=nl;i++) q[ql+i-1] = lq[i];for(int i=1;i<=nr;i++) q[ql+nl+i-1] = rq[i];solve(vl, mid, ql, ql+nl-1);solve(mid+1, vr, ql+nl, qr);
}int main(){scanf("%d%d", &N, &M);int NN = 0, Q = 0; int x,l,r,k;for(int i=1;i<=N;++i){scanf("%d", &a[i]);q[++NN] = Node(1,a[i],i);}char op[5];for(int i=1;i<=M;i++){scanf("%s", op);if(op[0]=='Q'){scanf("%d%d%d", &l, &r, &k);q[++NN] = Node(2,l,r,k,++Q);} else{scanf("%d%d", &l, &x);q[++NN] = Node(-1,a[l],l);q[++NN] = Node(+1,x,l);a[l] = x;}}solve(-1e9,1e9,1,NN);for(int i=1;i<=Q;i++){printf("%d\n", ANS[i]);}return 0;
}

P2617 Dynamic Rankings(整体二分)相关推荐

  1. P2617 Dynamic Rankings 整体二分

    树套树板子题,但是整体二分不管是时间复杂度还是空间复杂度都表现更优秀,所以用整体二分来水一波. 普通的整体二分是没有修改操作的.然鹅我们处理修改操作也比较容易,直接减上这个数,让后加上修改之后的数即可 ...

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

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

  3. P2617 Dynamic Rankings 动态区间第K大【树套树】或【整体二分】

    传送门 动态区间第KKK大问题,单点修改(这里是第kkk小,即是从小到大第kkk个) 这里还有个区间修改,有点类似的 P3332 [ZJOI2013]K大数查询 分析 树套树 树套树,就是用一种树形结 ...

  4. P2617 Dynamic Rankings

    题目链接:https://www.luogu.org/problem/P2617 题目描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j, ...

  5. P2617 Dynamic Rankings(主席树+树状数组)

    怕是还没有题解,所以先写一篇. 这题就是维护带修改的主席树.首先树套树肯定是能做的,既然树套树能做那么整体二分肯定也是可以的. 由于我并没有使用这两种做法,所以此处不予介绍. 大概描述下主席树的思路: ...

  6. P2617 Dynamic Rankings 动态主席树

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

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

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

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

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

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

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

最新文章

  1. 从无到有算法养成篇-单向循环链表的常规操作
  2. vanilla_如何在Vanilla JavaScript中操作DOM
  3. Akka简介多线程问题《four》译
  4. [声明]honkql大量密码被海空神佛团伙盗走
  5. revit2016与2017区别_Revit2016版与Revit2018版的区别?
  6. 基于FPGA的SD卡音乐播放器之SD卡篇
  7. pdf转图片在线转换免费
  8. 熵权法stata程序
  9. 微信红包服务器连接失败是怎么回事啊,微信公众平台,红包_微信发红包接口,线下测试正确,服务器上提示CA证书错误,微信公众平台,红包 - phpStudy...
  10. 喇叭音圈是大一点好还是小一点好
  11. Linux基础知识梳理
  12. Java操作linux脚本
  13. python 创建app 报重复app名报错解决
  14. 大数据专业就业涉及哪些方向领域
  15. From Data Mining to Knowledge Discovery in Databases
  16. 软件测试(基础知识)
  17. adobe认证证书含金量
  18. Qt中调用OpenCV函数库时Crashed问题的解决。
  19. 专题二:无穷小量阶的比较-一刷
  20. 【Android】Installed Build Tools revision _.0.0 is corrupted

热门文章

  1. 除了PS,还有它可以轻松实现图像处理!
  2. 孩子觉得数学难?那是底子没打好!
  3. 收藏 : 50个Excel逆天功能,一秒变“表哥”
  4. 明天放假,我放价!一个国庆假期教你学会数学建模
  5. java guava json文件_Json解析文件位置的问题
  6. java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...
  7. php gd库 函数 建立gif,PHP_PHP GD库生成图像的几个函数总结,使用GD库中提供的函数动态绘 - phpStudy...
  8. eladmin代码自动生成_如何让Mybatis自动生成代码
  9. python 防止转义_python字符串前加r、f、u、l 的区别
  10. pip 设置超时时间_Python pip使用超时问题解决方案