Submission #1281737

#TimeUsernameProblemLanguageResultExecution timeMemory
1281737Jawad_Akbar_JJGrowing Vegetables is Fun 4 (JOI21_ho_t1)C++20
100 / 100
68 ms11376 KiB
#include <iostream>
#include <vector>

using namespace std;
#define int long long
const int N = 2e5 + 10;
int a[N], d[N], Pre[N], Suf[N], Mx1[N], Mx2[N], d2[N];

signed main(){
	int n;
	cin>>n;

	for (int i=1;i<=n;i++){
		cin>>a[i];
		Mx1[i] = max(Mx1[i-1] + 1, a[i]);
		d[i] = max(0LL, Mx1[i] - a[i]);
		Pre[i] = Pre[i-1] + d[i] - min(d[i], d[i-1]);
		// cout<<Pre[i]<<' ';
	}
	// cout<<'\n';

	for (int i=n;i>=1;i--){
		Mx2[i] = max(Mx2[i+1] + 1, a[i]);
		d2[i] = max(0LL, Mx2[i] - a[i]);
		Suf[i] = Suf[i+1] + d2[i] - min(d2[i], d2[i+1]);
		// cout<<Suf[i]<<' ';
	}
	// cout<<'\n';

	for (int i=n-1;i>=1;i--){
		Mx1[i] = max(max(Mx1[i-1], Mx2[i+1]) + 1, a[i]);
		d[i] = max(0LL, Mx1[i] - a[i]);
		Pre[i] = Pre[i-1] + d[i] - min(d[i], d[i-1]);
		Pre[n] = min(Pre[n], max(Pre[i], Suf[i+1]));
		// cout<<Mx1[i]<<" "<<d[i]<<" "<<Pre[i]<<'\n';
	}
	// cout<<'\n';

	cout<<Pre[n]<<'\n';

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...