Educational Codeforces Round 90 (Rated for Div. 2) D. Maximum Sum on Even Positions

**
D. Maximum Sum on Even Positions**
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given an array a consisting of n integers. Indices of the array start from zero (i. e. the first element is a0, the second one is a1, and so on).

You can reverse at most one subarray (continuous subsegment) of this array. Recall that the subarray of a with borders l and r is a[l;r]=al,al+1,…,ar.

Your task is to reverse such a subarray that the sum of elements on even positions of the resulting array is maximized (i. e. the sum of elements a0,a2,…,a2k for integer k=⌊n−12⌋ should be maximum possible).

You have to answer t independent test cases.

Input
The first line of the input contains one integer t (1≤t≤2⋅104) — the number of test cases. Then t test cases follow.

The first line of the test case contains one integer n (1≤n≤2⋅105) — the length of a. The second line of the test case contains n integers a0,a1,…,an−1 (1≤ai≤109), where ai is the i-th element of a.

It is guaranteed that the sum of n does not exceed 2⋅105 (∑n≤2⋅105).

Output
For each test case, print the answer on the separate line — the maximum possible sum of elements on even positions after reversing at most one subarray (continuous subsegment) of a.

Example
inputCopy
4
8
1 7 3 4 7 6 2 9
5
1 2 1 2 1
10
7 8 4 5 7 6 8 9 7 3
4
3 1 2 1
outputCopy
26
5
37
5

int n;	cin>>n;
	ll arr[n];
	ll sum = 0;
	for(int i=0; i<n; i++)	{
		cin>>arr[i];
		if(i % 2 == 0)	{
			sum += arr[i];
			arr[i] *= -1;
		}
	}
	if(n == 1)	{
		cout<<sum<<"\n";
		return;
	}
	ll dp[n];
	dp[n-1] = 0;
	dp[n-2] = arr[n-1] + arr[n-2];
	for(int i=n-3; i>=0; i--)	{
		dp[i] = max(0ll , dp[i+2]) + arr[i] + arr[i+1];
	}
	cout<<sum + *max_element(dp, dp + n)<<"\n";

你可能感兴趣的:(Educational Codeforces Round 90 (Rated for Div. 2) D. Maximum Sum on Even Positions)