SP3946 MKTHNUM - K-th Number(整体二分)
思路
整体二分的板子题,没什么思路好说
代码
#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];
}
else
rx[++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];
}
else
lx[++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;
}
SP3946 MKTHNUM - K-th Number(整体二分)的更多相关文章
- POJ2104 K-th Number [整体二分]
题目传送门 K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 69053 Accepted: 24 ...
- BZOJ 3110: [Zjoi2013]K大数查询 [整体二分]
有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. N ...
- BZOJ3110:[ZJOI2013]K大数查询(整体二分)
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- BZOJ 3110 K大数查询 | 整体二分
BZOJ 3110 K大数查询 题面 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个 ...
- BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)
题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...
- 【BZOJ-3110】K大数查询 整体二分 + 线段树
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6265 Solved: 2060[Submit][Sta ...
- 静态区间第K小(整体二分、主席树)
题目链接 题解 主席树入门题 但是这里给出整体二分解法 整体二分顾名思义是把所有操作放在一起二分 想想,如果求\([1-n]\)的第\(k\)小怎么二分求得? 我们可以二分答案\(k\), \(O(n ...
- ZOJ 1112 Dynamic Rankings【动态区间第K大,整体二分】
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1112 题意: 求动态区间第K大. 分析: 把修改操作看成删除与增加 ...
- POJ2104 K-th Number(整体二分)
题解 又一次做这个题上一次用的是线段树上二分.这次用的是整体二分.结果: (第一个是整体二分) 整体二分就是对于所有查询都二分一个值.然后根据能不能成立把询问修改分成两部分,然后第二部分继承第一部分的 ...
- [ZJOI2013]K大数查询——整体二分
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是: 1 a b c:表示在第a个位置到第b个位置,每个位置加上一个数c 2 a b c:表示询问从第a个位置到第b个位置,第C大的数是多少. ...
随机推荐
- STL之Queue容器
1.Queue容器 1)queue是队列容器,是一种“先进先出”的容器. 2)queue是简单地装饰deque容器而成为另外的一种容器. 3)头文件.#include <queue> 2. ...
- 转:php 5.5源码安装全过程
下载 PHP 源码包 # wget http://cn2.php.net/distributions/php-5.5.15.tar.bz2 # tar xf php-5.5.15.tar.bz2 -C ...
- 用Django实现Video页面分类查询
Model表创建,Url映射,Views函数处理,Html生成 根据上图,视频方向与视频分类是多对多的关系,视频分类与视频信息是一对多的关系,难度级别是单一的查询条件(与之前俩者并无关系) Model ...
- webservice 生成客户端代码
使用 jdk 自带工具 wsimport wsimport -keep http://webservice/url?wsdl
- 32个使用python代码片段
1.冒泡排序 lis = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58] def sortport(): for i in range(len(lis ...
- MongoDB优化,建立索引实例及索引机制原理讲解
MongoDB优化,建立索引实例及索引机制原理讲解 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样 ...
- JustOj 1415: 字符串解压
题目描述 豆豆非常调皮,总喜欢把一样的东西摆在一起,然后用神奇的猫爪功把他们揉成一团. 比如一堆A,就会被揉成个数+A. 这就是豆豆的字符串压缩算法了. 比如给豆豆一个字符串:ABBCCCDDDDEE ...
- memcache,redis对比
一.问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 ( ...
- ubunta_django_install
sudo apt-get install python-pip sudo apt-get install python-virtualenv #安装本地虚拟环境管理工具 mkdir ~/django ...
- 巧用ELK快速实现网站流量监控可视化
前言 本文可能不会详细记录每一步实现的过程,但一定程度上可以引领小伙伴走向更开阔的视野,串联每个环节,呈现予你不一样的效果. 业务规模 8个平台 100+台服务器 10+个集群分组 微服务600+ 用 ...