#include <bits/stdc++.h>
#include "homecoming.h"
using namespace std;
const int NN = 2e6 + 5;
long long pref[NN];
int arr[NN], brr[NN];
int n, k;
int sup(int i)
{
if(i + k - 1 < n)
return (pref[i + k - 1] - (i == 0 ? 0 : pref[i - 1]));
return pref[n - 1] - pref[i - 1] + pref[k - (n - i) - 1];
}
long long f(int i, int x, int y)
{
if(x == 0)
return 0ll;
if(y == 0)
return (arr[i] - sup(i));
return arr[i] - brr[i];
}
long long f2(int i, int x, int y)
{
if(y == 0)
return 0ll;
if(x == 0)
return (arr[i] - sup(i));
return arr[i] - brr[(i + k - 1) % n];
}
long long solve(int N, int K, int *A, int *B)
{
n = N, k = K;
if(K == 1)
{
long long sum = 0;
for(int i = 0; i < N; i++)
sum += ((int) max(0, A[i] - B[i]));
return sum;
}
for(int i = 0; i < N; i++)
{
arr[i] = A[i];
brr[i] = B[i];
}
pref[0] = brr[0];
for(int i = 1; i < N; i++)
pref[i] = pref[i - 1] + brr[i];
long long dp1[N][3][3], dp2[N][3][3];
for(int i = 0; i < N; i++)
{
for(int k2 = 0; k2 < 2; k2++)
dp1[i][k2][0] = dp1[i][k2][1] = dp2[i][k2][0] = dp2[i][k2][1] = -1e15;
}
dp1[N - 1][0][0] = 0ll;
dp1[N - 1][1][1] = arr[N - 1] - sup(N - 1);
for(int i = N - 2; i >= 0; i--)
{
for(int p = 0; p < 2; p++)
{
for(int z = 0; z < 2; z++)
{
for(int h = 0; h < 2; h++)
dp1[i][p][z] = max(dp1[i][p][z], dp1[i + 1][h][z] + f(i, p, h));
}
}
}
dp2[0][0][0] = 0;
dp2[0][1][1] = arr[0] - sup(0);
for(int i = 1; i < N; i++)
{
for(int p = 0; p < 2; p++)
{
for(int z = 0; z < 2; z++)
{
for(int h = 0; h < 2; h++)
dp2[i][p][z] = max(dp2[i][p][z], dp2[i - 1][p][h] + f2(i, h, z));
}
}
}
long long mx = 0;
for(int i = 0; i < N; i++)
mx += (arr[i] - brr[i]);
mx = max({mx, dp1[0][0][0], dp1[0][0][1]});
for(int i = 1; i < N; i++)
{
int j = i - 1;
for(int h = 0; h < 2; h++)
{
for(int z = 0; z < 2; z++)
{
for(int p = 0; p < 2; p++)
{
long long res = dp1[i][0][h] + dp2[j][z][p];
if(h && z && K > 1)
res = res + pref[K - 2];
mx = max(mx, res);
}
}
}
}
return mx;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |