比赛 2025暑期集训第4场 评测结果 AAAAA
题目名称 环路运输 最终得分 100
用户昵称 OTTF 运行时间 0.434 s
代码语言 C++ 内存使用 9.61 MiB
提交时间 2025-07-05 09:00:07
显示代码纯文本

#include <cmath>
#include <cstdio>
#include <deque>
#include <iostream>
#include <utility>

using namespace std;

constexpr int N = 2233233;

int n;
int m;
long long nums[N];
deque<pair<long long, int>> q;
long long dp[N];
long long res;

int main () {
	
	freopen ("transportt.in", "r", stdin);
	freopen ("transportt.out" ,"w", stdout);

	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> nums[i];
		nums[i + n] = nums[i];
	}
	m = ceil (n / 2.0);
	n *= 2;

	for (int i = 1; i < m; i++) {
		while (!q.empty() && (q.back().first - q.back().second) <= (nums[i] - i)) {
			q.pop_back();
		}
		q.emplace_back(nums[i], i);
	}

	for (int i = m; i <= n; i++) {
		while (!q.empty() && q.front().second <= i - m + 1) {
			q.pop_front();
		}
		dp[i] = i - q.front().second + nums[i] + q.front().first;
		res = max (res, dp[i]);
		while (!q.empty() && (q.back().first - q.back().second) <= (nums[i] - i)) {
			q.pop_back();
		}
		q.emplace_back(nums[i], i);
	}

	cout << res << endl;

	return 0;
}