Submission #489267

# Submission time Handle Problem Language Result Execution time Memory
489267 2021-11-21T20:23:51 Z SirCovidThe19th Mountain Trek Route (IZhO12_route) C++17
100 / 100
472 ms 65536 KB
#include <bits/stdc++.h>
using namespace std;

const int mx = 1e6 + 5;

int n, k, A[mx], ans; vector<int> range[mx]; stack<int> stk; 

int main(){
    cin >> n >> k;
    for (int i = 1; i <= n; i++){
        cin >> A[i];
        while (!stk.empty() and A[stk.top()] <= A[i]) stk.pop();
        stk.push(i);
    }
    for (int i = 1; i <= n; i++){
        int mxTop = 0;
        while (!stk.empty()){
            int L = stk.top();
            if (L < i) range[i - L - 1].push_back(min(A[L], A[i]) - mxTop);
            else range[n - (L - i + 1)].push_back(min(A[L], A[i]) - mxTop);
            if (A[L] > A[i]) break;
            mxTop = max(mxTop, A[L]); stk.pop();
        }
        stk.push(i);
    }
    for (long long len = 1; len <= n; len++){
        for (int lim : range[len]){
            if (len * lim >= k) ans += 2 * (k / len), k = 0;
            else ans += 2 * lim, k -= len * lim;
        }
    }
    cout<<ans<<endl;
}
# Verdict Execution time Memory Grader output
1 Correct 16 ms 23756 KB Output is correct
2 Correct 13 ms 23756 KB Output is correct
3 Correct 12 ms 23764 KB Output is correct
4 Correct 12 ms 23744 KB Output is correct
5 Correct 12 ms 23756 KB Output is correct
6 Correct 13 ms 23756 KB Output is correct
7 Correct 14 ms 23776 KB Output is correct
8 Correct 15 ms 23756 KB Output is correct
9 Correct 13 ms 23792 KB Output is correct
10 Correct 52 ms 27648 KB Output is correct
11 Correct 55 ms 25164 KB Output is correct
12 Correct 62 ms 27664 KB Output is correct
13 Correct 424 ms 65536 KB Output is correct
14 Correct 472 ms 65536 KB Output is correct
15 Correct 376 ms 65536 KB Output is correct
16 Correct 403 ms 65536 KB Output is correct
17 Correct 400 ms 65536 KB Output is correct
18 Correct 433 ms 65536 KB Output is correct
19 Correct 436 ms 65536 KB Output is correct
20 Correct 333 ms 53436 KB Output is correct