整体二分,将询问与初值一起放入一个结构体里,然后每次二分判断询问在哪边,树状数组维护,时间复杂度O((n+Q)lognlogMAX_a[i]

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstring> using namespace std;
const int MAXN = 200005;
const int inf = 1e9+1; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=ch=='-'?-1:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
} struct Data{
int x,y,k,id,type;
}data[MAXN<<1],q1[MAXN<<1],q2[MAXN<<1]; int n,m,cnt;
int ans[MAXN],f[MAXN]; inline void update(int x,int w){
for(;x<=n;x+=x&-x) f[x]+=w;
} inline int query(int x){
int ret=0;
for(;x;x-=x&-x) ret+=f[x];
return ret;
} void Solve(int ql,int qr,int l,int r){
if(ql>qr) return;
if(l==r){
for(register int i=ql;i<=qr;i++)
if(data[i].type==2) ans[data[i].id]=l;
return;
}
int mid=l+r>>1,p1=0,p2=0;
for(register int i=ql;i<=qr;i++){
if(data[i].type==1){
if(data[i].x<=mid) {
q1[++p1]=data[i];
update(data[i].id,1);
}else q2[++p2]=data[i];
}
else {
int res=query(data[i].y)-query(data[i].x-1);
if(res>=data[i].k) q1[++p1]=data[i];
else{
data[i].k-=res;
q2[++p2]=data[i];
}
}
}
for(register int i=1;i<=p1;i++)
if(q1[i].type==1) update(q1[i].id,-1);
for(register int i=1;i<=p1;i++) data[i+ql-1]=q1[i];
for(register int i=1;i<=p2;i++) data[i+ql+p1-1]=q2[i];
Solve(ql,ql+p1-1,l,mid);Solve(ql+p1,qr,mid+1,r);
} int main(){
n=rd();m=rd();
for(register int i=1;i<=n;i++) data[++cnt]=Data{rd(),1,inf,i,1};
for(register int i=1;i<=m;i++) data[++cnt]=Data{rd(),rd(),rd(),i,2};
Solve(1,cnt,-inf,inf);
for(register int i=1;i<=m;i++) printf("%d\n",ans[i]);
return 0;
}

整体二分(模板) 求区间第k小的更多相关文章

  1. 【模板】区间第k小

    [模板]区间第k小 我实在是太弱了现在才会这个东西QAQ. 主席树做法. 一张关于主席树的无字说明 线段树\(2\)是只单点修改了实心酒红色点的线段树\(2\),线段树\(2\)中的蓝色节点实际上就是 ...

  2. HDOJ题目4417 Super Mario(划分树求区间比k小的个数+二分)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

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

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

  4. 主席树--动态区间第k小

    主席树--动态区间第\(k\)小 模板题在这里洛谷2617. 先对几个问题做一个总结: 阅读本文需要有主席树的基础,也就是通过区间kth的模板题. 静态整体kth: sort一下找第k小,时间复杂度\ ...

  5. HDU 2665.Kth number 区间第K小

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. The UVALIVE 7716 二维区间第k小

    The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询 每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素 n <= 2 ...

  7. ZOJ 2112 Dynamic Rankings(树状数组套主席树 可修改区间第k小)题解

    题意:求区间第k小,节点可修改 思路:如果直接用静态第k小去做,显然我更改一个节点后,后面的树都要改,这个复杂度太高.那么我们想到树状数组思路,树状数组是求前缀和,那么我们可以用树状数组套主席树,求出 ...

  8. POJ2104 K-th Number —— 区间第k小 整体二分

    题目链接:https://vjudge.net/problem/POJ-2104 K-th Number Time Limit: 20000MS   Memory Limit: 65536K Tota ...

  9. HDU 2665.Kth number-可持久化线段树(无修改区间第K小)模板 (POJ 2104.K-th Number 、洛谷 P3834 【模板】可持久化线段树 1(主席树)只是输入格式不一样,其他几乎都一样的)

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

随机推荐

  1. js 实现纵向轮播

    效果 html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  2. C++返回引用的需求

    1.重载+=操作符返回*this或者某个参数的引用可以方便链式调用,比如C++流操作就是cout<< a << b << c这样的,就是靠不停返回stream的引用 ...

  3. Luogu P2458 [SDOI2006]保安站岗(树形dp)

    P2458 [SDOI2006]保安站岗 题意 题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下 ...

  4. [JZOJ3293] 【SHTSC2013】阶乘字符串

    题目 题目大意 给你一个字符串,判断这个字符串是否为"阶乘字符串". 就是子序列包含字符集的全排列的字符串. n≤26n\leq 26n≤26 ∣S∣≤450|S|\leq 450 ...

  5. 0905NOIP模拟测试赛后总结

    40分rank33.连续爆炸祭. 这次爆炸和心态无关.主要是答题策略出了点问题.T2大众分20.暴搜打表非常强. 拿到题目看到前面人都看pdf,突然想跟风皮一把,就把刚下的doc也转成pdf了hhh ...

  6. shell学习笔记1: shell 中的变量与常见符号使用方法

    变量 声明即用 a=2 b="123" 调用 ${varName}或者 $varName echo $b echo ${a} 常见变量 $?:判断上一个语句是否成功 $0:执行脚本 ...

  7. lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(一) 简介

    一. 为什么这样构架 1. 系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,keepalived提供健康检查,故障转移,提高系统的可用性!采用 ...

  8. vue-cli2.0+webpack 项目搭建

    一:准备工作 安装nodejs + 安装webpack + 配置环境变量 => 确保在dos界面的任何路径都都可直接使用命令 二:搭建项目 1.全局安装vue脚手架  [DOS界面] npm i ...

  9. Python ----键抠图

    背景 这段时间,经常有人来找我,说我是学计算机的,能不能帮他p一下证件照,我只想说,MMP的,我是学计算机的不错,可我不会ps阿. 我想了一会,python 这么火,能不能来个自动抠图,说好就干吧 介 ...

  10. python 虚拟环境virtualenv搭建

    一.安装虚拟环境 pip install  virtualenv -i  https://pypi.douban.com/simple   用国内镜像,速度更快 二.创建虚拟目录 在需要存放软件工程的 ...