luogu-单调队列/单调栈专题
P2698 [USACO12MAR]花盆Flowerpot 题意: 给出水滴的坐标与下落时间,你需要构造一个盆,使他的宽度满足 在其范围内能够接住水滴时间(第一滴和最后一滴/最大与最小值)时间差大于等于k,且使得这个盆的直径最小 思路: 会想到尺取法(双指针)来在符合条件内缩小范围,同时又涉及到区间最值问题,那么上来想就很容易想到单调队列或者单调栈来维护区间最值 两点:满足区间最小与最大之差大于k,且使得其长度最小。 (1)区间最值:由于是要进行双指针操作:所以选择双端队列来实现单调队列维护最值,且能维护在 q.front().x ~ q.back().x的区间最值 (2)在符合条件下对 front/队首进行移动,以达到缩小区间操作 code: #include <bits/stdc++.h> using namespace std; const int maxn = 1e5+7; const int inf = 0x3f3f3f3f; struct node{ int x,y; }; bool cmp(node a,node b){ return a.x<b.x; } node arr[maxn]; deque<node>q1; deque<node>q2; int main(){ int n,k; cin>>n>>k; for(int i=0;i<n;i++){ cin>