제출 #339866

#제출 시각아이디문제언어결과실행 시간메모리
339866Vladikus004등산 경로 (IZhO12_route)C++14
0 / 100
17 ms2792 KiB
#include <bits/stdc++.h> #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define inf 2e9 using namespace std; typedef long long ll; typedef pair <int, int> pii; //#define int long long const int N = 1000000 + 3; int n, k, a[N], b[N], cnt[N], buff[N]; ll solve(int k){ vector <int> st; for (int i = n - 1; i >= 0; i--) if (b[i] > 0) st.pb(i); for (int i = n - 1; i >= 0; i--){ while (!st.empty() && b[st.back()] == 0) st.pop_back(); if (b[i] > 0) st.push_back(i); if (b[i] < 0){ while (b[i] < 0 && !st.empty()){ int gt = min(-b[i], b[st.back()]); cnt[(st.back() + n - i) % n] += gt; b[st.back()] -= gt; b[i] += gt; while (!st.empty() && b[st.back()] == 0) st.pop_back(); } } } ll ans = 0; for (int i = 1; i <= n; i++){ int gt = min(k/i, cnt[i]); k -= i * 1LL * gt; cnt[i] -= gt; ans += gt; cnt[i] = 0; } return ans*2LL; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); // freopen("input.txt", "r", stdin); cin >> n >> k; pair <ll, ll> mx = {-1, -1}; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < n - 1; i++) b[i] = a[i + 1] - a[i]; b[n - 1] = a[0] - a[n - 1]; ll pref = 0; for (int i = 0; i < n; i++){ pref += b[i]; mx = max(mx, {pref, i}); } int cnt = 0; for (int i = mx.second; i < n; i++) buff[cnt++] = b[i]; for (int i = 0; i < mx.second; i++) buff[cnt++] = b[i]; for (int i = 0; i < n; i++) b[i] = buff[i]; b[n] = b[0]; for (int j = 0; j < n; j++) b[j] = b[j + 1]; ll ans = 0; ans = max(ans, solve(k)); cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...