题目:
题解:
1.切入点:从某一时刻之后整个管道都会被填满而之前就不会,发现答案具有二段性使用二分。
2.
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
using ll=long long;
int b[N];
int n,len;
pair<int,int>q[N];
pair<int,int>c[N];
bool check(int mid){
int idx=0;
for(int i=1;i<=n;i++){
int p=q[i].first,t=q[i].second;
//cout<<"p "<<p<<" "<<"t "<<t<<endl;
if(mid<t)continue;
//len从1开始
c[idx].first=max(1,p-(mid-t));
c[idx].second=min((ll)p+(mid-t),(ll)len);
//cout<<c[idx].first<<" "<<c[idx].second<<endl;
idx++;
}
sort(c,c+idx);
int st=-1,ed=-1;
for(int i=0;i<idx;i++){
//这里可以合并为一个区间的条件是连个区间有重叠的部分或者相邻
//这里记录最后一个区间的两个端点来判断是否满足条件