| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 489269 | SirCovidThe19th | 등산 경로 (IZhO12_route) | C++17 | 453 ms | 63300 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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();
			int dst = (L < i) ? (i - L - 1) : (n - (L - i + 1));
			if (dst) range[dst].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 | 
|---|---|---|---|---|
| Fetching results... | ||||
