刚学了整体二分,用这种解法来解决这道题。

首先对于每个询问时可以二分解决的,这也是可以使用整体二分的前提。将原来的序列看成是插入操作,和询问操作和在一起根据值域进行二分。用树状数组来检验二分值。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=100010,INF=1e9;
4 struct node{
5 int op,x,y,z;
6 }q[N<<1],lq[N<<1],rq[N<<1];
7 int n,m,t,c[N],ans[N];
8
9 int lowbit(int x){
10 return x&(-x);
11 }
12
13 int ask(int x){
14 int sum=0;
15 while(x){
16 sum+=c[x];
17 x-=lowbit(x);
18 }
19 return sum;
20 }
21
22 void change(int x,int y){
23 while(x<=n){
24 c[x]+=y;
25 x+=lowbit(x);
26 }
27 }
28
29 void solve(int L,int R,int l,int r){
30 if(l>r) return ;//操作序列为空
31 if(L==R){
32 for(int i=l;i<=r;i++){
33 if(q[i].op>0) ans[q[i].op]=L;
34 }
35 return ;
36 }
37 int mid=(L+R)>>1;
38 int lt=0,rt=0;
39 for(int i=l;i<=r;i++){
40 if(q[i].op==0){
41 if(q[i].y<=mid) change(q[i].x,1),lq[++lt]=q[i];
42 else rq[++rt]=q[i];
43 }
44 else{
45 int cnt=ask(q[i].y)-ask(q[i].x-1);
46 if(cnt>=q[i].z) lq[++lt]=q[i];
47 else q[i].z-=cnt,rq[++rt]=q[i];
48 }
49 }
50 for(int i=r;i>=l;i--){
51 if(q[i].op==0 && q[i].y<=mid) change(q[i].x,-1);
52 }
53 for(int i=1;i<=lt;i++) q[l+i-1]=lq[i];
54 for(int i=1;i<=rt;i++) q[l+lt+i-1]=rq[i];
55 solve(L,mid,l,l+lt-1);
56 solve(mid+1,R,l+lt,r);
57 }
58
59 int main(){
60 scanf("%d%d",&n,&m);
61 for(int i=1;i<=n;i++){
62 int val;scanf("%d",&val);
63 q[++t].op=0,q[t].x=i,q[t].y=val;
64 }
65 for(int i=1;i<=m;i++){
66 int l,r,k;
67 scanf("%d%d%d",&l,&r,&k);
68 q[++t].op=i,q[t].x=l,q[t].y=r,q[t].z=k;
69 }
70 solve(-INF,INF,1,t);
71 for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
72 return 0;
73 }

POJ2104 K-th number (整体二分)的更多相关文章

  1. POJ2104 K-th Number [整体二分]

    题目传送门 K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 69053   Accepted: 24 ...

  2. POJ2104 K-th Number(整体二分)

    题解 又一次做这个题上一次用的是线段树上二分.这次用的是整体二分.结果: (第一个是整体二分) 整体二分就是对于所有查询都二分一个值.然后根据能不能成立把询问修改分成两部分,然后第二部分继承第一部分的 ...

  3. BZOJ 3110: [Zjoi2013]K大数查询 [整体二分]

    有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. N ...

  4. BZOJ3110:[ZJOI2013]K大数查询(整体二分)

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  5. BZOJ 3110 K大数查询 | 整体二分

    BZOJ 3110 K大数查询 题面 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个 ...

  6. BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)

    题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...

  7. 【BZOJ-3110】K大数查询 整体二分 + 线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6265  Solved: 2060[Submit][Sta ...

  8. 静态区间第K小(整体二分、主席树)

    题目链接 题解 主席树入门题 但是这里给出整体二分解法 整体二分顾名思义是把所有操作放在一起二分 想想,如果求\([1-n]\)的第\(k\)小怎么二分求得? 我们可以二分答案\(k\), \(O(n ...

  9. ZOJ 1112 Dynamic Rankings【动态区间第K大,整体二分】

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1112 题意: 求动态区间第K大. 分析: 把修改操作看成删除与增加 ...

  10. [ZJOI2013]K大数查询——整体二分

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是: 1 a b c:表示在第a个位置到第b个位置,每个位置加上一个数c 2 a b c:表示询问从第a个位置到第b个位置,第C大的数是多少. ...

随机推荐

  1. 基于ABP实现DDD--领域逻辑和应用逻辑

      本文主要介绍了多应用层的问题,包括原因和实现.通过理解介绍了如何区分领域逻辑和应用逻辑,哪些是正确的实践,哪些是不推荐的或者错误的实践. 一.多应用层的问题 1.多应用层介绍   不知道你们是否会 ...

  2. angular 变化检测和ngZone

  3. 15分钟搭建RocketMQ源码调试环境

    下载源码 下载源码,github页面选择(rocketmq-all-4.7.1)版本压缩包,https://github.com/apache/rocketmq/tags 导入IDEA 1. 使用ID ...

  4. CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-E

    比赛链接 A 题解 知识点:思维,模拟. 发现 \(b\) 串第一个字符是 \(1\) 则只能使用 max , \(0\) 则只能使用 min ,随后只需要模拟到 \(a\) 串剩余 \(m\) 个字 ...

  5. Eclipse里项目名有红叉,但是项目里的每一个文件都没有红叉

    原因一:导入的文件被删除了. 解决方法:右击项目名,在弹出的菜单中,选择"Bulid Path"-->"configure build path"--&g ...

  6. Luogu P5030 长脖子鹿放置(网络流)

    匈牙利T了,Dinic飞了... 按奇偶连 #include <cstdio> #include <iostream> #include <cstring> #in ...

  7. Java NIO全面详解(看这篇就够了)

    很多技术框架都使用NIO技术,学习和掌握Java NIO技术对于高性能.高并发网络的应用是非常关键的@mikechen NIO简介 NIO 中的 N 可以理解为 Non-blocking,不单纯是 N ...

  8. 虚拟DOM解析及其在框架里的应用

    虚拟DOM解析及其在框架里的应用 浏览器是怎样解析HTML并且绘出整个页面的 上图为webkit引擎浏览器的处理流程,如上图大致分为4大步: 第一步,HTML解析器分析html,构建一颗DOM树: 第 ...

  9. Selenium 4 有哪些不一样?

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/d59b986c.html 你好,我是测试蔡坨坨. 众所周知,Selenium在2021年10月13号发布了Selenium4 ...

  10. apk编辑器测评

    hi你好,我今天要介绍的就是apk编辑器 这里我用的是apk编辑器专业版 APK编辑器 关于 APK 编辑器智友汉化组论坛:bbs.zhiyoo.com修改应用程序名称美化 UI: 更改背景图片删除广 ...