和整体二分的模板相比,多了修改操作。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1e5+10,INF=1e9;
4 int n,m,t,c[N],ans[N],b[N];
5 struct node{
6 int op,x,y,z;
7 }q[N*3],rq[N*3],lq[N*3];
8
9 void change(int x,int y){
10 for(;x<=n;x+=x&(-x)) c[x]+=y;
11 }
12
13 int ask(int x){
14 int sum=0;
15 for(;x;x-=x&(-x)) sum+=c[x];
16 return sum;
17 }
18
19 void solve(int L,int R,int l,int r){
20 if(l>r) return ;
21 if(L==R){
22 for(int i=l;i<=r;i++){
23 if(q[i].op>0) ans[q[i].op]=L;
24 }
25 return ;
26 }
27 int mid=(L+R)>>1;
28 int lt=0,rt=0;
29 for(int i=l;i<=r;i++){
30 if(q[i].op==0){
31 if(q[i].y<=mid) change(q[i].x,1),lq[++lt]=q[i];
32 else rq[++rt]=q[i];
33 }
34 else if(q[i].op==-1){
35 if(q[i].y<=mid) change(q[i].x,-1),lq[++lt]=q[i];
36 else rq[++rt]=q[i];
37 }
38 else{
39 int cnt=ask(q[i].y)-ask(q[i].x-1);
40 if(cnt>=q[i].z) lq[++lt]=q[i];
41 else q[i].z-=cnt,rq[++rt]=q[i];
42 }
43 }
44 for(int i=r;i>=l;i--){//还原树状数组
45 if(q[i].op==0&&q[i].y<=mid) change(q[i].x,-1);
46 if(q[i].op==-1&&q[i].y<=mid) change(q[i].x,1);
47 }
48 for(int i=1;i<=lt;i++) q[l+i-1]=lq[i];
49 for(int i=1;i<=rt;i++) q[l+lt+i-1]=rq[i];
50 solve(L,mid,l,l+lt-1);solve(mid+1,R,l+lt,r);
51 }
52
53 int main(){
54 scanf("%d%d",&n,&m);
55 for(int i=1;i<=n;i++){
56 scanf("%d",&b[i]);
57 q[++t].op=0,q[t].x=i,q[t].y=b[i];
58 }
59 char a;int tot=0;
60 for(int i=1;i<=m;i++){
61 cin>>a;
62 if(a=='Q'){
63 int l,r,k;
64 scanf("%d%d%d",&l,&r,&k);
65 q[++t].op=++tot,q[t].x=l,q[t].y=r,q[t].z=k;
66 }
67 else{//将一次修改看作两次操作
68 int pos,val;
69 scanf("%d%d",&pos,&val);
70 q[++t].op=-1,q[t].x=pos,q[t].y=b[pos];
71 q[++t].op=0,q[t].x=pos,q[t].y=val;
72 b[pos]=val;//注意要在原序列上修改
73 }
74 }
75 solve(0,INF,1,t);
76 for(int i=1;i<=tot;i++) printf("%d\n",ans[i]);
77 return 0;
78 }

acwing1782 Dynamic Rankings (整体二分)的更多相关文章

  1. [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  2. 【BZOJ1901】Dynamic Rankings [整体二分]

    Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定一个含 ...

  3. BZOJ 1901 Zju2112 Dynamic Rankings ——整体二分

    [题目分析] 上次用树状数组套主席树做的,这次用整体二分去水. 把所有的查询的结果一起进行二分,思路很好. [代码] #include <cstdio> #include <cstr ...

  4. BZOJ1901: Zju2112 Dynamic Rankings(整体二分 树状数组)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 9094  Solved: 3808[Submit][Status][Discuss] Descript ...

  5. ZOJ2112 Dynamic Rankings(整体二分)

    今天学习了一个奇技淫巧--整体二分.关于整体二分的一些理论性的东西,可以参见XRH的<浅谈数据结构题的几个非经典解法>.然后下面是一些个人的心得体会吧,写下来希望加深一下自己的理解,或者如 ...

  6. BZOJ 1901 Dynamic Rankings (整体二分+树状数组)

    题目大意:略 洛谷传送门 这道题在洛谷上数据比较强 貌似这个题比较常见的写法是树状数组套主席树,动态修改 我写的是整体二分 一开始的序列全都视为插入 对于修改操作,把它拆分成插入和删除两个操作 像$C ...

  7. 洛谷$P2617\ Dynamic\ Rankings$ 整体二分

    正解:整体二分 解题报告: 传送门$w$ 阿查询带修区间第$k$小不显然整体二分板子呗,,, 就考虑先按时间戳排序(,,,其实并不需要读入的时候就按着时间戳排的鸭$QwQ$ 每次二分出$mid$先把所 ...

  8. BZOJ.1901.Dynamic Rankings(整体二分)

    题目链接 BZOJ 洛谷 (以下是口胡) 对于多组的询问.修改,我们可以发现: 假设有对p1,p2,p3...的询问,在这之前有对p0的修改(比如+1),且p0<=p1,p2,p3...,那么我 ...

  9. ZOJ 2112 Dynamic Rankings(二分,树套树)

    动态区间询问kth,单点修改. 区间用线段树分解,线段树上每条线段存一颗平衡树. 不能直接得到kth,但是利用val和比val小的个数之间的单调性,二分值.log^3N. 修改则是一次logN*log ...

随机推荐

  1. java------JRE和JDK

    JDK(Java Development kit):Java开发工具包 包括 JVM(Java Virtual Machine):java虚拟机,真正运行java程序的地方(Java语言在运行时并不是 ...

  2. Bika LIMS 开源LIMS集—— SENAITE的使用(用户、角色、部门)

    设置 添加实验室人员,系统用户 因为创建实验室时必须选择实验室经理/主任/负责人,因此需要先创建实验室经理人员. 创建人员时输入人员姓名,可上传签名图片. 创建实验室部门 输入实验室名称.代码,选择实 ...

  3. 承上启下继往开来,Python3上下文管理器(ContextManagers)与With关键字的迷思

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_217 在开发过程中,我们会经常面临的一个常见问题是如何正确管理外部资源,比如数据库.锁或者网络连接.稍不留意,程序将永久保留这些资 ...

  4. Nginx api接口调用配置

    1 # Nginx api接口调用配置 2 3 # 什么是跨域同源? 4 # 同源策略:协议(http.https.wss--)+域名+端口=一个完整的网站 5 # 跨域:当前所在的网站post(ge ...

  5. MySQL金融应用场景下跨数据中心的MGR架构方案(2)

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 如何在多个数据中心部署多套MGR集群,并实现故障快速切换. 上篇文章介绍了如何在多数据中心部署多套MGR集群,并构建集群间 ...

  6. 关于奉加微PHY62xx系列如何选型?PHY6222/PHY6212/PHY6252

    PHY6252是一款支持BLE 5.2功能的系统级芯片(SOC),集成了低功耗的高性能多模射频收发机,搭载32位高性能低功耗处理器,提供64K retention SRAM.可选512/256K Fl ...

  7. Spring源码 06 IOC refresh方法1

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  8. Git 06 分支

    参考源 https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0 版本 本文章基于 Git 2.35.1.2 概述 分支用 ...

  9. SvelteUI:运用svelte3构建的网页版UI组件库(升级版)

    距离上次分享的svelte-ui 1.0已经一月有余,这次带来全新升级完整版svelte-ui 2.0. 这次优化并新增15+个组件.在开发之初借鉴了element-ui组件库,所以在组件结构及语法上 ...

  10. HCIA-Datacom 2.1 实验一:IPv4编址及IPv4路由基础实验

    实验目的 掌握接口IPv4地址的配置方法 理解LoopBack接口的作用与含义 理解直连路由的产生原则 掌握静态路由的配置方法并理解其生效的条件 掌握通过PING工具测试网络层联通性 掌握 ...