UVa 12715 Watching the Kangaroo(二分)
题意:n条线段(n <= 100000) (L<=R <= 1e9) ,m组询问(m <= 100000) 每次询问一个点的覆盖范围的最大值。一个点x对于一条包括其的线段,覆盖范围为min(x-L,R-x)
思路:考虑将线段一份为二,对于左边的那部分,以右端点排序,然后 二分找到右端点恰好满足的那个点为id,那么接下来要做的就是就是在[id,n]这个范围内找到L最小的那个点,能够通过求前缀最大来得到。那么左边最大距离为 seg[id].L-preLMax[id],右边最大的求法也是类似。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
const int maxn = 100000+10;
#define REP(_,a,b) for(int _ = (a); _ <= (b); _++)
struct seg{
int L,R;
seg(int L = 0,int R = 0):L(L),R(R){}
};
bool cmp1(seg a,seg b) {
if(a.R != b.R) return a.R < b.R;
else return a.L < b.L;
}
bool cmp2(seg a,seg b) {
if(a.L != b.L) return a.L < b.L;
else return a.R < b.R;
}
vector<seg>lft,rgt; int preLMax[maxn],preRMax[maxn];
int n,m; int main(){ int ncase,T=1;
cin >> ncase;
while(ncase--) {
lft.clear();
rgt.clear();
scanf("%d%d",&n,&m);
for(int i = 0; i < n; i++) {
int L,R;
scanf("%d%d",&L,&R);
int mid = (L+R)>>1;
lft.push_back(seg(L,mid));
rgt.push_back(seg(mid,R));
} sort(lft.begin(),lft.end(),cmp1);
preLMax[lft.size()] = 1e9;
for(int i = lft.size()-1; i >= 0; i--) {
preLMax[i] = min(preLMax[i+1],lft[i].L);
}
sort(rgt.begin(),rgt.end(),cmp2);
preRMax[0] = rgt[0].R;
for(int i = 1; i < rgt.size(); i++) {
preRMax[i] = max(preRMax[i-1],rgt[i].R);
}
printf("Case %d:\n",T++);
while(m--) {
int x,ans=0;
scanf("%d",&x);
int L = 0,R = lft.size()-1;
while(L <= R) {
int mid = (L+R) >>1;
if(lft[mid].R < x) {
L = mid+1;
}else{
R = mid-1;
}
}
ans = max(ans,x-preLMax[L]);
L = 0,R = rgt.size()-1;
while(L <= R) {
int mid = (L+R) >>1;
if(rgt[mid].L < x) {
L = mid+1;
}else{
R = mid-1;
}
}
ans = max(ans,preRMax[R]-x);
ans = max(ans,0);
printf("%d\n",ans);
}
}
return 0;
}
UVa 12715 Watching the Kangaroo(二分)的更多相关文章
- UVALive 6656 Watching the Kangaroo --二分
题意:给你一些区间,再查询一些点,问这些点与所有区间形成的最小距离的最大值.最小距离定义为:如果点在区间内,那么最小距离为0,否则为min(pos-L[i],R[i]-pos). 解法:当然要排个序, ...
- 6656 Watching the Kangaroo
6656 Watching the KangarooDay by day number of Kangaroos is decreasing just liketiger, whale or lion ...
- UVa 714 Copying Books(二分)
题目链接: 传送门 Copying Books Time Limit: 3000MS Memory Limit: 32768 KB Description Before the inventi ...
- UVA 10816 + HDU 1839 Dijstra + 二分 (待研究)
UVA 题意:两个绿洲之间是沙漠,沙漠的温度不同,告诉起点,终点,求使得从起点到终点的最高温度最小的路径,如果有多条,输出长度最短的路径: 思路:用最小费用(最短路径)最大流(最小温度)也能搞吧,但因 ...
- UVA 10668 - Expanding Rods(数学+二分)
UVA 10668 - Expanding Rods 题目链接 题意:给定一个铁棒,如图中加热会变成一段圆弧,长度为L′=(1+nc)l,问这时和原来位置的高度之差 思路:画一下图能够非常easy推出 ...
- uva 10566 Crossed Ladders (二分)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVa 10539 (筛素数、二分查找) Almost Prime Numbers
题意: 求正整数L和U之间有多少个整数x满足形如x=pk 这种形式,其中p为素数,k>1 分析: 首先筛出1e6内的素数,枚举每个素数求出1e12内所有满足条件的数,然后排序. 对于L和U,二分 ...
- uva 10004 Bicoloring(dfs二分染色,和hdu 4751代码差不多)
Description In the ``Four Color Map Theorem" was proven with the assistance of a computer. This ...
- Uva 10339 - Watching Watches【数论,暴力】
题目链接:10339 - Watching Watches 题意:两个时钟,一个每天慢a秒,一个每天慢b秒,问两钟重新相遇的时刻 1圈有12 * 60 * 60秒,然后1圈 / abs(a - b), ...
随机推荐
- 【js】用正则表达式对文字进行局部替换
比如有个字符串http://www.55188.com/thread-8306254-2-3.html,需要把8306254后面的2替换成其它数字,其它保持不变,该如何办呢?请看代码: var url ...
- Windows 8提升普通管理员权限为超级管理员权限以及激活超级管理员Administrator
在Windows 8下运行某些操作时(比如删除一些文件或者更改某些系统设置时)系统会提示我们权限不够.须要Administrator账户的权限. 相信很多其它的使用者都会觉得自己当前使用的账户已经是系 ...
- 开源 免费 java CMS - FreeCMS1.5-数据对象-guestbook
下载地址:http://code.google.com/p/freecms/ guestbook 从FreeCMS 1.5 开始支持 在使用留言相关标签时,标签会封装guestbook供页面调用. 属 ...
- base64 图片编码之再优化
首先进入网站: http://b64.io/ 最多可减少图片体积容量近70%,建议不要优化base 64 图片格式为gif , 已实测如果用gif的话会增加容量.
- webpack 生命周期
1.插件 可以安装lifecycle-webpack-plugin 插件来查看生命周期信息. 2.webpack流程(生命周期图) 地址:https://img.alicdn.com/tps/TB1G ...
- js forEach for区别
1.循环中断差别 具体见示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta chars ...
- jquery局部打印插件使用
基于jquery库的jquery.PrintArea.js插件源代码为: (function ($) { var printAreaCount = 0; $.fn.printArea = functi ...
- delattr
>>> class MyData(): def __init__(self,name,phone): self.name=name self.phone=phone def upda ...
- Redis学习(7)-通用命令
keys pattern: 获取所有与pattern匹配的key,返回所有与该key匹配的keys. 通配符: *表示任意一个或多个字符串. ?表示一个字符. 例如: 查询所有的key:keys * ...
- SSO之安装CAS Server
JA-SIG CAS(Central Authentication Service)为Web应用系统提供了单点登录服务.它的特性包括:一个开放和具有很好文档支持的协议:一个Java开源服务器组件:提供 ...