思路

整体二分的板子题,没什么思路好说

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct Query{int type,pos,val,l,r,k,aid;
}Query[110000],lx[110000],rx[110000];
int ans[10000],n,m,qid,aid,minx=0x3f3f3f3f,maxx=-0x3f3f3f3f;
namespace BIT{int bit[110000];int lowbit(int x){return x&(-x);}void add(int pos,int val){while(pos<=n){bit[pos]+=val;pos+=lowbit(pos);}}int query(int pos){int ans=0;while(pos){ans+=bit[pos];pos-=lowbit(pos);}return ans;}
};
void divide(int L,int R,int l,int r){//L,R 值域 l,r 操作序列if(l>r)return;int lt=0,rt=0;if(L==R){for(int i=l;i<=r;i++)if(Query[i].aid)ans[Query[i].aid]=L;return;}int mid=(L+R)>>1;for(int i=l;i<=r;i++){if(Query[i].type==1){//修改if(Query[i].val<=mid){BIT::add(Query[i].pos,1);lx[++lt]=Query[i];}elserx[++rt]=Query[i];            }else{//查询int cnt=BIT::query(Query[i].r)-BIT::query(Query[i].l-1);if(cnt<Query[i].k){Query[i].k-=cnt;rx[++rt]=Query[i];}elselx[++lt]=Query[i];}}for(int i=l;i<=r;i++)if(Query[i].type==1&&Query[i].val<=mid)BIT::add(Query[i].pos,-1);for(int i=1;i<=lt;i++)Query[l+i-1]=lx[i];for(int i=1;i<=rt;i++)Query[l+lt+i-1]=rx[i];divide(L,mid,l,l+lt-1);divide(mid+1,R,l+lt,r);
}
int main(){scanf("%d %d",&n,&m);for(int i=1;i<=n;i++){int x;scanf("%d",&x);Query[++qid].pos=i;Query[qid].type=1;Query[qid].val=x;maxx=max(maxx,x);minx=min(minx,x);}for(int i=1;i<=m;i++){Query[++qid].type=2;scanf("%d %d %d",&Query[qid].l,&Query[qid].r,&Query[qid].k);Query[qid].aid=++aid;}divide(minx,maxx,1,qid);for(int i=1;i<=m;i++)printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/dreagonm/p/10126344.html

SP3946 MKTHNUM - K-th Number(整体二分)相关推荐

  1. [ZJJOI2013]K大数查询 整体二分

    [ZJJOI2013]K大数查询 链接 luogu 思路 整体二分. 代码 #include <bits/stdc++.h> #define ll long long using name ...

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

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

  3. P3332 [ZJOI2013]K大数查询 - 整体二分-区间修改

    题目链接:https://www.luogu.com.cn/problem/P3332 思路:我们区间修改用一个线段树维护就可以了. #include <bits/stdc++.h> us ...

  4. 【洛谷1527】 [国家集训队]矩阵乘法(整体二分)

    传送门 洛谷 Solution 考虑看到什么k小就整体二分套上去试一下. 矩形k小整体二分+二维树状数组就好了. 代码实现 // luogu-judger-enable-o2 /*mail: mlea ...

  5. #4604. The kth maximum number(整体二分 + 树套树)

    #4604. The kth maximum number 给定一个大小不超过5×1055 \times 10 ^ 55×105的矩形区域,有一些点有点权. 每次询问给定x1,y1,x2,y2,kx_ ...

  6. P3332 [ZJOI2013]K大数查询(整体二分做法)

    P3332 [ZJOI2013]K大数查询 题意: 题解: 利用整体二分来做,这个题和P3834 [模板]可持久化线段树 2的区别在于本题的修改是区间修改,所以将里面的树状数组改成线段树就行,区间修改 ...

  7. 【整体二分】区间第k小(金牌导航 整体二分-1)

    区间第k小 金牌导航 整体二分-1 题目大意 给出一个序列,有若干查询,每次查询给出l,r,k,让你求l~r这个区间的第k大 输入样例 7 3 1 5 2 6 3 7 4 2 5 3 4 4 1 1 ...

  8. 经典题:poj2104-区间第k小 整体二分学习

    写在前面 区间第k小 可以说是一个很经典的数据结构题了,这道题有很多种解法比如莫队离线.主席树.整体二分等等. 之前用莫队和主席树写过这道题,今天来学习一个以前不会的算法--整体二分. 因为最近遇到一 ...

  9. 【XSY2720】区间第k小 整体二分 可持久化线段树

    题目描述 给你你个序列,每次求区间第\(k\)小的数. 本题中,如果一个数在询问区间中出现了超过\(w\)次,那么就把这个数视为\(n\). 强制在线. \(n\leq 100000,a_i<n ...

最新文章

  1. 小程序判断用户在线状态
  2. java readline读取最后一行_java的转换流解析
  3. visio wps 流程图_科研必备:几款好用的流程图工具,助力你的论文/科研绘图
  4. 《IPv6技术精要》一2.4 扩展报头
  5. byte比较_byte[]与String互转不一致引起的bug
  6. 三朵云 华为_云时代和5G将重构网络结构
  7. Design Compiler指南——预综合过程
  8. 有计算机信号专业吗,计算机医学图像及信号处理
  9. python删除符合条件的行_这十道经典Python笔试题,全做对算我输
  10. ECShop如何设置默认的配送方式和支付方式
  11. SqlHelper 类
  12. leetcode不同路径-结题( C++、Python、解析式)
  13. SPSS 的安装与概貌-第一章
  14. PL/SQL中导出整个表、表结构、部分数据、以及导入整个表
  15. 【源码】C++坦克大战
  16. python选股软件编写
  17. android 微信小程序 gps 飘,微信小程序实现自动定位功能
  18. 最详细bugku杂项小白解法(1~24已完结)
  19. Java 递归实现树形菜单
  20. SAP 固定资产增值和减值

热门文章

  1. 笔记2 自定义文件上传
  2. 23个MySQL常用查询语句
  3. JavaScript 方法传参
  4. ACCP学习旅程之-----硬件配置
  5. 限定项目的 Node.js 版本
  6. HDU 6092 Rikka with Subset 思维 递推
  7. LVS负载均衡之持久性连接介绍(session篇)
  8. iOS - OC Foundation 框架
  9. ios4 向 ios5 迁移短信的方式
  10. 1.1 Friday the Thirteenth