# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
90287 | 2018-12-21T05:14:09 Z | mirbek01 | Mountain Trek Route (IZhO12_route) | C++17 | 2 ms | 500 KB |
# include <bits/stdc++.h> using namespace std; const int N = 1e6 + 2; int n, k, a[N]; int main(){ scanf("%d %d", &n, &k); for(int i = 1; i <= n; i ++){ scanf("%d", a + i); } int lo = 1, hi = 1e9, m; while(lo <= hi){ int md = (lo + hi) >> 1; long long cnt = 0; for(int i = 1; i <= n; i ++){ if(a[i] < md) cnt += md - a[i]; } if(cnt <= k) lo = md + 1, m = md; else hi = md - 1; } long long bg = 0, cur = 0; for(int i = 1; i <= n; i ++){ int nxt = i + 1; if(nxt > n) nxt = 1; if(n > 2 || i == 1) bg += abs(a[i] - a[nxt]); } for(int i = 1; i <= n; i ++) a[i] = max(a[i], m); for(int i = 1; i <= n; i ++){ int nxt = i + 1; if(nxt > n) nxt = 1; if(n > 2 || i == 1) cur += abs(a[i] - a[nxt]); } cout << bg - cur << endl; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 256 KB | Output is correct |
2 | Correct | 2 ms | 500 KB | Output is correct |
3 | Correct | 2 ms | 500 KB | Output is correct |
4 | Incorrect | 1 ms | 500 KB | Output isn't correct |
5 | Halted | 0 ms | 0 KB | - |