Submission #1322700

#TimeUsernameProblemLanguageResultExecution timeMemory
1322700PieArmySparklers (JOI17_sparklers)C++20
0 / 100
1 ms332 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...