P2698 花盆Flowerpot 單調佇列

2021-08-20 21:02:46 字數 720 閱讀 7822

鏈結

有n滴水,給出座標,水每乙個時間單位會往下掉一格,花盆可以隨意擺放,要求在寬度最小的情況下接住的第一滴水和最後一滴水時間差超過d

橫座標排序,列舉左邊,然後維護移動視窗,之後遞增右邊直到時間差大於d,然後記錄取最小值。

#include

#include

using namespace std;

struct nodea[100001];

int h1,t1,h2,t2,q[100001],q2[100001];

int n,d,ans,r;

bool cmp(node x,node y)//排序

int main()

sort(a,a+1+n,cmp);

h1=1;t1=0;ans=2147483647;

h2=1;t2=0;r=0;

for (int l=1;l<=n;l++)

if (a[q[h1]].t-a[q2[h2]].t>=d)

ans=min(ans,a[r].x-a[l].x);//更新最小值

}if (ans==2147483647) printf("-1");

else

printf("%d",ans);

}