#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
const ll inf=2e18;
int n,k;
ll t;
ll arr[100023];
bool f(ll s){
int l=k,r=k,a=k,b=k;
ll ca=-inf,cb=-inf,wa=0,wb=0;
s*=2*t;
ll cur=s;
while(true){
while(wa<=0&&a>0){
ca=max(ca,(arr[a]-arr[a-1])-wa);
wa+=s-(arr[a]-arr[a-1]);
a--;
}
while(wb<=0&&b<n-1){
cb=max(cb,(arr[b+1]-arr[b])-wb);
wb+=s-(arr[b+1]-arr[b]);
b++;
}
if(wa>0&&ca<=cur){
cur+=wa;
wa=0;
ca=-inf;
l=a;
}
else if(wb>0&&cb<=cur){
cur+=wb;
wb=0;
cb=-inf;
r=b;
}
else break;
}
if(wa<wb){
swap(wa,wb);
swap(ca,cb);
}
if(ca<=cur){
cur+=wa;
}
else return false;
if(cb<=cur){
cur+=wb;
}
else return false;
return true;
}
signed main(){
ios_base::sync_with_stdio(23^23);cin.tie(0);
cin>>n>>k>>t;
k--;
for(int i=0;i<n;i++){
cin>>arr[i];
}
int l=1,r=1e9;
while(l<r){
ll s=(l+r)/2;
if(f(s))r=s;
else l=s+1;
}
cout<<l<<endl;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |