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

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

 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. python常用功能模块

    路径相关:os.pathlib Windows注册表相关:winreg 系统cpu.内存.线程相关:psutil 文件.文件夹处理:shutil 解析和生成ini文件:ConfigParser:(co ...

  2. Ubu18开机自启动-Systemd

    参考链接: https://blog.csdn.net/qq_16268979/article/details/114771854 本文内容为个人测试记录,具体文件目录请以读者自己电脑为准,此处只是提 ...

  3. Dapr 与 NestJs ,实战编写一个 Pub & Sub 装饰器

    Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架.Dapr 确保开发人员专注 ...

  4. [NCTF2019]SQLi-1||SQL注入

    1.打开之后首先尝试万能密码登录和部分关键词(or.select.=.or.table.#.-等等)登录,显示被检测到了攻击行为并进行了拦截,结果如下: 2.使用dirmap进行目录扫描,发现robo ...

  5. MySQL Shell无法拉起MGR集群解决办法

    MySQL Shell无法拉起MGR集群解决办法 用MySQL Shell要重新拉起一个MGR集群时,可能会提示下面的错误信息: Dba.rebootClusterFromCompleteOutage ...

  6. 新一代大数据任务调度 - Apache DolphinScheduler喜提十大开源新锐项目 & 最具人气项目

    经 10000+ 开发者公开票选,20+专家评审. 10+ 主编团打分,历经数月打磨,11 月 19 日,由InfoQ 发起并组织的[2020中国技术力量年度榜单评选]结果正式揭晓. 2020 年度十 ...

  7. LuoguP2876 [USACO07JAN]解决问题Problem Solving (区间DP)(未完成)

    #include "Head.cpp" const int N = 307; int f[N][N], a[N], b[N], sumA[N], sumB[N]; int main ...

  8. Spring源码 04 IOC XML方式

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

  9. 急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00

    在Golang Web编程的世界里,君不言高性能则已,言高性能必称Iris.彩虹女神的名号响彻寰宇.名动江湖,单论一个快字,无人能出其右,就连以简洁轻量著称于世的Gin也难以望其项背,只见彩虹女神Ir ...

  10. HMS Core Discovery第17期直播预告|音随我动,秒变音色造型师

    [导读] 随着音视频内容品类的不断丰富及音乐创作门槛不断降低,大量用户正热切的参与到全民创作的大潮中.我们应该怎么去拥抱移动端影音潜力市场?音频编辑又可以有什么新玩法? 本期直播<音随我动,秒变 ...