bzoj4130: [PA2011]Kangaroos
Description
定义两个区间互相匹配表示这两个区间有交集。
#include<bits/stdc++.h>
const int inf=0x7fffffff;
int _(){
int x=,c=getchar();
while(c<)c=getchar();
while(c>)x=x*+c-,c=getchar();
return x;
}
int n,q,B,p2=;
int vs[][],xs[];
struct Q{
int l,r,id;
}qs[],q2[];
bool operator<(Q a,Q b){
return a.l>b.l;
}
struct Q2{
int l,r;
}q3[];
bool operator<(Q2 a,Q2 b){
return a.l>b.l;
}
int idp=,bit[][],ans[],lr[][];
void mins(int&a,int b){if(a>b)a=b;}
void maxs(int&a,int b){if(a<b)a=b;}
void calc(int l,int r){
if(r-l+<=B)return;
++idp;
int m=l+r>>;
int lmx=inf,rmn=;
for(int i=m+;i<=r;++i){
mins(lmx,vs[i][]);
maxs(rmn,vs[i][]);
q2[p2++]=(Q){lmx,rmn,idp};
}
lmx=inf,rmn=;
for(int i=m;i;--i){
mins(lmx,vs[i][]);
maxs(rmn,vs[i][]);
q2[p2++]=(Q){lmx,rmn,idp};
}
calc(l,m);
calc(m+,r);
}
void inc(int*a,int w,int mx){
for(;w<=mx;w+=w&-w)++a[w];
}
int sum(int*a,int w){
int s=;
for(;w;w-=w&-w)s+=a[w];
return s;
}
int main(){
n=_();q=_();B=sqrt(n*);
for(int i=;i<=n;++i){
xs[i]=vs[i][]=_();
vs[i][]=_();
}
std::sort(xs+,xs+n+);
for(int i=;i<=n;++i)vs[i][]=std::lower_bound(xs+,xs+n+,vs[i][])-xs;
for(int i=;i<=q;++i)qs[i].l=_(),qs[i].r=std::upper_bound(xs+,xs+n+,_())-xs-,qs[i].id=i;
std::sort(qs+,qs+q+);
calc(,n);
std::sort(q2,q2+p2);
for(int i=,p=;i<=q;++i){
for(;p<p2&&q2[p].l>=qs[i].l;++p)inc(bit[q2[p].id],q2[p].r,n+);
for(int j=;j<=idp;++j){
maxs(ans[qs[i].id],sum(bit[j],qs[i].r));
}
}
for(int i=;i<=n;++i)lr[i][]=inf;
for(int d=;d<=B;++d){
p2=;
for(int l=;l<=n;++l){
int r=l+d-;
if(r>n)break;
mins(lr[l][],vs[r][]);
maxs(lr[l][],vs[r][]);
q3[p2++]=(Q2){lr[l][],lr[l][]};
}
std::sort(q3,q3+p2);
int rmn=inf;
for(int i=,p=;i<=q;++i){
for(;p<p2&&q3[p].l>=qs[i].l;++p)mins(rmn,q3[p].r);
if(rmn<=qs[i].r)maxs(ans[qs[i].id],d);
}
}
for(int i=;i<=q;++i)printf("%d\n",ans[i]);
return ;
}
bzoj4130: [PA2011]Kangaroos的更多相关文章
- BZOJ4130:[PA2011]Kangaroos
浅谈\(K-D\ Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline/pr ...
- 题解 洛谷 P6349 【[PA2011]Kangaroos】
先考虑对题目进行转化,我们称两个区间有交集为这两个区间能匹配,每个询问就是在序列中最长能连续匹配的长度. 对序列中的一个区间\([l,r]\)和询问的一个区间\([L,R]\),若满足\(L \leq ...
- 洛谷 P6349 - [PA2011]Kangaroos(KDT+标记下放)
洛谷题面传送门 KDT 上打标记的 hot tea. 考虑将询问 \(A,B\) 看作二维平面直角坐标系上的一个点 \((A,B)\),那么我们这样考虑,我们从左到右扫过全部 \(n\) 个区间并开一 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj 3073: [Pa2011]Journeys -- 线段树优化最短路
3073: [Pa2011]Journeys Time Limit: 20 Sec Memory Limit: 512 MB Description Seter建造了一个很大的星球,他准备建 ...
- 【BZOJ3073】[Pa2011]Journeys 线段树+堆优化Dijkstra
[BZOJ3073][Pa2011]Journeys Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在 ...
- BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS
BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N ...
- Counting Kangaroos is Fun 求最少可见袋鼠数
Description There are n kangaroos with pockets. Each kangaroo has a size (integer number). A kangaro ...
- bzoj3073: [Pa2011]Journeys 线段树优化建图
bzoj3073: [Pa2011]Journeys 链接 BZOJ 思路 区间和区间连边.如何线段树优化建图. 和单点连区间类似的,我们新建一个点,区间->新点->区间. 又转化成了单点 ...
随机推荐
- JS如何判断包括IE11在内的IE浏览器 <转载>
今天碰到一个奇怪的问题,有一个页面,想指定用IE浏览器打开,在VS开发环境没有问题,但部署到服务器上,即使是用IE打开页面,还是提示“仅支持IE”,真是晕啊!! 判断是否IE浏览器用的是window. ...
- OC语言前期准备
OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应 ...
- 初学DOM树解析xml文件
做了一次设计模式实验的题目: 某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以将原本存储在手机中的通信录.短信.照片.歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或 ...
- css浏览器窗口大小
Window 尺寸 有三种方法能够确定浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条). 对于Internet Explorer.Chrome.Firefox.Opera 以及 Safari: ...
- ajax 创建对象验证
function getValue(){ var str = $("#selectid option:selected").val(); //获得选中的值 var num = $( ...
- Service中事务不能回滚的解决方式(转)
1.在service方法里面如果对异常进行了捕获的话,该事务是不会进行回滚的 默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚. spr ...
- ajaxsearch要点1
ajaxsearch中必须将form的class定义为pagerForm,才能在foot中submit按钮得到值
- java中的包以及内部类的介绍
1:形式参数和返回值的问题(理解) (1)形式参数: 类名:需要该类的对象 抽象类名:需要该类的子类对象 接口名:需要该接口的实现类对象 (2)返 ...
- js事件捕获,事件冒泡,事件委托以及DOM事件流
一:DOM事件流: 事件流是从页面接收事件的顺序,DOM2级事件规定事件流包括三个阶段: ①事件捕获阶段:用意在于事件达到目标之前捕获它,在事件捕获阶段事件流模型:document→html→body ...
- git merge 和 rebase 区别
git pull 超级不推荐使用git pull 有坑,谨慎使用,pull底层是merge git pull 是 git fetch + git merge FETCH_HEAD 的缩写.所以,默认 ...