Submission #409113

#TimeUsernameProblemLanguageResultExecution timeMemory
409113ngpin04Growing Vegetables is Fun 4 (JOI21_ho_t1)C++14
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
using namespace std;
const int N = 2e5 + 5; 
const int oo = 2e9;

int val[N];
int a[N];
int f[N];
int n;
 
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
 
	for (int i = 1; i <= n; i++)
		val[i] = max(val[i - 1] + 1, a[i]);
 
	long long cur = 0;
	for (int i = 1; i <= n; i++) 
		f[i] = val[i] - a[i];

	f[n] = max(f[n], f[n - 1]);

	for (int i = 1; i <= n; i++) 
		cur += f[i] - min(f[i], f[i + 1]);

	long long ans = cur;
	// cerr << n << ": ";
	// for (int i = 1; i <= n; i++)
	// 	cerr << f[i] << " \n"[i == n];
 
	for (int i = n - 1; i >= 1; i--) {
		cur -= f[i - 1] - min(f[i - 1], f[i]);
		cur -= f[i] - min(f[i], f[i + 1]);
		cur -= f[i + 1] - min(f[i + 1], f[i + 2]);
		
		val[i + 1] = max(val[i + 2] + 1, a[i + 1]);
		f[i + 1] = val[i + 1] - a[i + 1];
 
		val[i] = max({val[i - 1] + 1, val[i + 1] + 1, a[i]});
		f[i] = val[i] - a[i];

		f[i] = max({f[i], f[i - 1], f[i + 1]});
 	
 		cur += f[i - 1] - min(f[i - 1], f[i]);
		cur += f[i] - min(f[i], f[i + 1]);
		cur += f[i + 1] - min(f[i + 1], f[i + 2]);
		ans = min(ans, cur);
		// cerr << i << ": " << cur << " ";
		// for (int j = 1; j <= n; j++)
		// 	cerr << f[j] << " \n"[j == n];
	}
	cout << ans;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...