#include<bits/stdc++.h> #define mid(l, r) (l + ((r - l) >> 1)) #define sz(x) (int(x.size())) #define repeat(i, a, b) for (int i = (a); i <= (b); i++) #define until(i, a, b) for (int i = (a); i >= (b); i--) #define array_of(T) std::unique_ptr<T[]> using ll = longlong; using vi = std::vector<int>; using pii = std::pair<int, int>;
constexprint N = 2e5 + 10;
int n; ll sum; ll a[N]; ll s1[N];
voidRun(){ std::cin >> n; sum = 0; repeat(i, 1, n) { std::cin >> a[i]; sum += a[i] * (i % 2 == 1 ? 1 : -1); }
ll p = n % 2 == 0 ? n - 2 : n - 1;
repeat(i, 1, n) s1[i] = a[i] * 2 + i; ll pmin = 1e18; ll m = 0; repeat(i, 1, n) { if (i % 2 == 1) pmin = std::min(pmin, s1[i]); else m = std::max(m, s1[i] - pmin); }
repeat(i, 1, n) s1[i] = a[i] * 2 - i; ll smin = 1e18; until(i, n, 1) { if (i % 2 == 1) smin = std::min(smin, s1[i]); else m = std::max(m, s1[i] - smin); }
std::cout << sum + std::max({0ll, m, p}) << "\n"; }
#include<bits/stdc++.h> #define mid(l, r) (l + ((r - l) >> 1)) #define sz(x) (int(x.size())) #define repeat(i, a, b) for (int i = (a); i <= (b); i++) #define until(i, a, b) for (int i = (a); i >= (b); i--) #define array_of(T) std::unique_ptr<T[]> #define all(x) x.begin(), x.end() #define range(x, a, b) x + a, x + b + 1 using ll = longlong; using vi = std::vector<int>; using pii = std::pair<int, int>; using pll = std::pair<ll, ll>;
#include<bits/stdc++.h> #define mid(l, r) (l + ((r - l) >> 1)) #define sz(x) (int(x.size())) #define repeat(i, a, b) for (int i = (a); i <= (b); i++) #define until(i, a, b) for (int i = (a); i >= (b); i--) #define array_of(T) std::unique_ptr<T[]> #define all(x) x.begin(), x.end() #define range(x, a, b) x + a, x + b + 1 using ll = longlong; using vi = std::vector<int>; using pii = std::pair<int, int>;
constexprint T = 20; constexprint N = (1 << 20) + 5;
int n, m, k; int g[30]; int dp[T + 5][N][2];
voidRun(){ std::cin >> n >> m >> k; repeat(i, 1, k) std::cin >> g[i];
if (m == 1) { std::cout << 1 << "\n"; return; }
for (int i = 1; i <= n; i++) for (int j = 0; j < (1 << i); j++) dp[i][j][0] = dp[i][j][1] = -1;
auto remove = [&](int mask, int p) { int low = mask & ((1 << p) - 1); int high = (mask >> (p + 1)) << p; return high | low; };
auto dfs = [&](auto F, int remain, int config, int turn) -> int { auto &val = dp[remain][config][turn];
if (val != -1) return val; if (remain == 1) return val = config;
if (turn == 0) { repeat(i, 1, k) { if (g[i] <= remain) { // remove g[i]-1 th bit int next = remove(config, g[i] - 1); if (F(F, remain - 1, next, 1) == 1) return val = 1; } } return val = 0; } else { repeat(i, 1, k) { if (g[i] <= remain) { int next = remove(config, g[i] - 1); if (F(F, remain - 1, next, 0) == 0) return val = 0; } } return val = 1; } };
for (int mask = 0; mask < (1 << n); mask++) dfs(dfs, n, mask, 0); int ans = 0; for (int mask = 0; mask < (1 << n); mask++) ans += 1 + dp[n][mask][0];