题意:

  平面上n个点,给出d,求最小的k使得在某个横坐标长度为k的区间内的纵坐标的最大值与最小值之差超过d

题解:

  如果做过poj2823这道题的话,这道题应该是挺好想的。(没做过的同学可以点这里)

  我们可以二分长度k,然后就和上面这道题的操作一样了。复杂度是O(n*logn),1e5的数据完全没问题。

  但其实我们可以不用二分答案。

  我们假设区间[L1,R1]满足max-min>=d,且对于左端点来说,R1是满足条件的最左点。那么对于L2>L1,满足max-min>=d的区间[L2,R2]一定满足R2>=R1。(应该挺好想的吧qaq) 不过我们还是证明一下好了。

  我们假设R2<R1,那么既然[L2,R2]都满足条件了,所以[L1,R2]也一定是满足条件的,这与题设不符。

  所以我们从左到右枚举左端点,用单调队列维护区间纵坐标即可。

上代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define LL long long
#define RI register int
using namespace std;
const int INF = 0x7ffffff ;
const int N = 1e5 + 10 ;inline int read() {int k = 0 , f = 1 ; char c = getchar() ;for( ; !isdigit(c) ; c = getchar())if(c == '-') f = -1 ;for( ; isdigit(c) ; c = getchar())k = k*10 + c-'0' ;return k*f ;
}
struct point {int x, y ;
}p[N] ;
int n, d ;
deque<int>q1 ; // 单调递减序列维护最大值
deque<int>q2 ; // 单调递增序列维护最小值
deque<int>q11 ;
deque<int>q22 ; inline bool cmp1(point s,point t) { return s.x < t.x ; }
int main() {n = read(), d = read() ;for(int i=1;i<=n;i++) {p[i].x = read(), p[i].y = read() ;}sort(p+1,p+n+1,cmp1) ;int res = 0, ans = INF ;int i = 0 ; // 右端点 for(int j=1;j<=n;j++) { // j维护左端点while(q1.size() && q11.front() < j) q1.pop_front(), q11.pop_front() ;while(q2.size() && q22.front() < j) q2.pop_front(), q22.pop_front() ;if(q1.size() && q1.size()) res = q1.front()-q2.front() ;else res = 0 ;while(res < d && i < n) {i++ ;while(q1.size() && q1.back() <= p[i].y) q1.pop_back(), q11.pop_back() ;while(q2.size() && q2.back() >= p[i].y) q2.pop_back(), q22.pop_back() ;q1.push_back(p[i].y), q11.push_back(i) ; q2.push_back(p[i].y), q22.push_back(i) ;res = q1.front()-q2.front() ;}if(res >= d) {ans = min(ans,p[i].x-p[j].x) ;}}if(ans == INF) printf("-1") ; else printf("%d",ans) ;return 0 ;
}

View Code

——end ;

转载于:https://www.cnblogs.com/zub23333/p/8569713.html

花盆Flowerpot[USACO12MAR]相关推荐

  1. 洛谷P2698 [USACO12MAR]花盆Flowerpot

    P2698 [USACO12MAR]花盆Flowerpot 题目描述 Farmer John has been having trouble making his plants grow, and n ...

  2. [洛谷P2698] [USACO12MAR]花盆Flowerpot

    洛谷题目链接:[USACO12MAR]花盆Flowerpot 题目描述 Farmer John has been having trouble making his plants grow, and ...

  3. P2698 [USACO12MAR]花盆Flowerpot(单调队列+二分)

    P2698 [USACO12MAR]花盆Flowerpot 一看标签........十分后悔 标签告诉你单调队列+二分了............ 每次二分花盆长度,蓝后开2个单调队列维护最大最小值 蓝 ...

  4. 洛谷 P2698 [USACO12MAR]花盆Flowerpot(抄)

    题目描述 Farmer John has been having trouble making his plants grow, and needs your help to water them p ...

  5. [USACO12MAR]花盆Flowerpot 二分答案+单调队列

    题意: 给出N滴水的坐标,y表示水滴的高度,x表示它下落到x轴的位置. 每滴水以每秒1个单位长度的速度下落.你需要把花盆放在x轴上的某个位置,使得从被花盆接着的第1滴水开始,到被花盆接着的最后1滴水结 ...

  6. luogu P2698 [USACO12MAR]花盆Flowerpot

    背景: 集训Day3Day3Day3,单调队列开启. 其实原来就会,但是好像没做几题(除了斜率优化的). 打算用111至222天做一些题(太菜,大佬勿喷). rank=20000+rank=20000 ...

  7. [USACO12MAR]花盆Flowerpot

    题面描述 传送门 思路 观察完题意之后,我们看到最小 就会想到二分枚举花盆长度xxx,需要用两个队列来维护最大值与最小值. 我们检测[i,i−x+1][i,i-x+1][i,i−x+1]中是否有两个水 ...

  8. [题解]LuoGu2698: [USACO12MAR]花盆Flowerpot

    原题传送门 这道题在洛谷难度为蓝题(提高+省选-)个人认为难度普及+够了吧 不难想到单调队列的做法,首先二分答案,对于每个花盆宽度,我们进行O(n)的验证 维护两个单调队列,分别维护纵坐标的最小值与最 ...

  9. #单调队列#洛谷 2698 [USACO12MAR]花盆Flowerpot

    题目 给出N滴水的坐标(X,Y),y表示水滴的高度,x表示它下落到x轴的位置.每滴水每秒从(x,y)到(x,y-1).你需要把花盆放在x轴上的某个位置,使得从开始接水到水滴完之间的时间差至少为D,只要 ...

最新文章

  1. 向上取整的方法_瓷砖测量的方法有哪些?瓷砖尺寸一般是多少?
  2. 沸腾了!苏宁全员涨薪,每月最高多1万6!网友:这一刻,我希望我是苏宁人...
  3. 前端能读取压缩包内容吗?_解决前端多环境部署的痛点
  4. Android--批量插入数据到SQLite数据库
  5. Activiti源码之建造者模式 Builder
  6. linux rpm mysql mysql_config,Linux CentOS6 mysql rpm安装
  7. server的自增主键返回函数 sql_SQL自增主键函数
  8. 努力学计算机四年,终于进腾讯了!
  9. tomcat端口被占用的两个解决方法
  10. java输入一串字符串反转_反转Java中的字符串
  11. VS2017 远程调试linux(centos).net core
  12. exls下载后显示jsp_jsp笔记
  13. 测试知识总结1 —— 测试的分类
  14. Swift - 访问通讯录-使用AddressBook.framework和AddressBookUI.framework框架实现
  15. fault、error、failure辨析
  16. C++ endl 的本质是什么
  17. Android Studio搭建阿里云生活物联网平台自有品牌APP
  18. 硬盘挂载 mount 详细步骤及遇到问题“Mount is denied because the NTFS volume is already exclusively opened”
  19. 三年前找工作的我,希望给正在求职的你一些启发
  20. kvm 模块加载时报错:insmod: error inserting 'kvm.ko': -1 Unknown symbol in module

热门文章

  1. ai技术与能源行业_最终AI能源效率的新方程式
  2. npm install xxx 出现Unexpected token < in
  3. 惠普战66prog2拆机_惠普战66二代内部做工怎么样?全新惠普战66二代拆机图解评测(含视频教程)...
  4. provider: SQL Network Interfaces , error: 26 - Error Locating Server / Instance
  5. python小玩意——猜数字游戏
  6. php artisan command,artisan command 小技巧
  7. HTML学习笔记——列表标签
  8. 致敬达叔!Python带你回顾达叔出演过的作品与合作过的演员
  9. simulink电路仿真
  10. hive通过grouping sets多维度组合去重统计避免使用distinct