Submission #47075

#TimeUsernameProblemLanguageResultExecution timeMemory
47075BruteforcemanHacker (BOI15_hac)C++11
100 / 100
85 ms28976 KiB
#include "bits/stdc++.h"
using namespace std;
int n;
int a[500010];
long long p[500010];
const long long inf = 1e17;

int main(int argc, char const *argv[])
{
	ios_base :: sync_with_stdio (false);
	cin.tie (0);
	cin >> n;
	for(int i = 0; i < n; i++) {
		cin >> a[i];
	}
	int move = (n + 1) >> 1;
	long long sum = 0;
	for(int i = 0; i < move; i++) {
		sum += a[i];
	}
	for(int i = 0; i < n; i++) {
		p[i] = sum;
		sum -= a[i];
		sum += a[(i + move) % n];
	}
	long long ans = 0;
	deque <pair <long long, int>> Q;
	for(int i = 0; i < move; i++) {
		while(!Q.empty() && Q.back().first >= p[i]) {
			Q.pop_back();
		}
		Q.push_back(make_pair(p[i], i));
	}
	for(int i = 0; i < n; i++) {
		ans = max(ans, Q.front().first);
		if(Q.front().second == i) {
			Q.pop_front();
		}
		int id = (i + move) % n;
		while(!Q.empty() && Q.back().first >= p[id]) {
			Q.pop_back();
		}
		Q.push_back(make_pair(p[id], id));
	}
	cout << ans << endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...