Submission #339807

#TimeUsernameProblemLanguageResultExecution timeMemory
339807Vladikus004Mountain Trek Route (IZhO12_route)C++14
0 / 100
1 ms364 KiB
#include <bits/stdc++.h> #define int long long #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; const int N = 1000000 + 3; int n, k, a[N], b[N], cnt[N]; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); // freopen("input.txt", "r", stdin); cin >> n >> k; 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]; 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(); } } } int ans = 0; for (int i = 1; i <= n; i++){ int gt = min(k/i, cnt[i]); k -= i * gt; cnt[i] -= gt; ans += gt; } cout << ans * 2; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...