提出 #44024119


ソースコード 拡げる

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
using ll = long long int;
using Data = pair<ll, int>;
const ll INF = 1LL << 60;

int main() {
    int N; cin >> N;
    vector<ll> A(N);
    for(int i=0; i<N; i++) {
        cin >> A[i];
    }

    // i < k かつ A[i] <= A[k] を満たす最小の添字 k を探す
    vector<int> next_big(N);
    stack< pair<ll, int> > st;
    st.emplace(+INF, N);
    for(int i=N-1; i>=0; i--) {
        while (st.top().first < A[i]) st.pop();
        next_big[i] = st.top().second;
        st.emplace(A[i], i);
    }
    while (st.size()) st.pop();

    // i < k かつ A[i] >= A[k] を満たす最小の添字 k を探す
    vector<int> next_small(N);
    st.emplace(-INF, N);
    for(int i=N-1; i>=0; i--) {
        while (st.top().first > A[i]) st.pop();
        next_small[i] = st.top().second;
        st.emplace(A[i], i);
    }

    priority_queue<Data> que_max;
    priority_queue<Data> que_min;
    vector<ll> dp(N + 1, -INF);
    dp[0] = 0;
    for(int i=0; i<N; i++) {
        // 最大値を取る
        while (!que_max.empty()) {
            auto [val, end_idx] = que_max.top();
            if (i < end_idx) {
                dp[i+1] = max(dp[i+1], val - A[i]);
                break;
            } else {
                que_max.pop();
            }
        }
        while (!que_min.empty()) {
            auto [val, end_idx] = que_min.top();
            if (i < end_idx) {
                dp[i+1] = max(dp[i+1], val + A[i]);
                break;
            } else {
                que_min.pop();
            }
        }

        // 使わない
        dp[i+1] = max(dp[i+1], dp[i]);
        // max として使う
        que_max.emplace(dp[i] + A[i], next_big[i] + 1);
        // min として使う
        que_min.emplace(dp[i] - A[i], next_small[i] + 1);
    }
    cout << dp[N] << endl;
    return 0;
}

提出情報

提出日時
問題 E - Good Partition
ユーザ tsutaj
言語 C++ (GCC 9.2.1)
得点 600
コード長 2005 Byte
結果 AC
実行時間 106 ms
メモリ 17740 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 2
AC × 58
セット名 テストケース
Sample 00_sample_00, 00_sample_01
All 00_sample_00, 00_sample_01, 10_random_00, 10_random_01, 10_random_02, 10_random_03, 10_random_04, 10_random_05, 10_random_06, 10_random_07, 10_random_08, 10_random_09, 10_random_10, 10_random_11, 10_random_12, 10_random_13, 10_random_14, 10_random_15, 10_random_16, 10_random_17, 10_random_18, 10_random_19, 10_random_20, 10_random_21, 10_random_22, 10_random_23, 10_random_24, 10_random_25, 10_random_26, 10_random_27, 10_random_28, 10_random_29, 10_random_30, 10_random_31, 10_random_32, 10_random_33, 10_random_34, 10_random_35, 10_random_36, 10_random_37, 10_random_38, 10_random_39, 11_min_00, 12_max_00, 12_max_01, 12_max_02, 12_max_03, 12_max_04, 12_max_05, 12_max_06, 12_max_07, 12_max_08, 90_challenge_00, 90_challenge_01, 90_challenge_02, 91_challenge_00, 91_challenge_01, 91_challenge_02
ケース名 結果 実行時間 メモリ
00_sample_00 AC 8 ms 3628 KiB
00_sample_01 AC 2 ms 3632 KiB
10_random_00 AC 84 ms 13364 KiB
10_random_01 AC 102 ms 13908 KiB
10_random_02 AC 62 ms 9372 KiB
10_random_03 AC 89 ms 13560 KiB
10_random_04 AC 17 ms 4568 KiB
10_random_05 AC 77 ms 12860 KiB
10_random_06 AC 75 ms 12684 KiB
10_random_07 AC 23 ms 5476 KiB
10_random_08 AC 38 ms 6232 KiB
10_random_09 AC 64 ms 9496 KiB
10_random_10 AC 13 ms 4096 KiB
10_random_11 AC 43 ms 7812 KiB
10_random_12 AC 69 ms 10224 KiB
10_random_13 AC 27 ms 5700 KiB
10_random_14 AC 58 ms 9096 KiB
10_random_15 AC 64 ms 9264 KiB
10_random_16 AC 72 ms 10304 KiB
10_random_17 AC 8 ms 3976 KiB
10_random_18 AC 52 ms 8392 KiB
10_random_19 AC 12 ms 4056 KiB
10_random_20 AC 68 ms 10332 KiB
10_random_21 AC 80 ms 13028 KiB
10_random_22 AC 75 ms 12740 KiB
10_random_23 AC 47 ms 8108 KiB
10_random_24 AC 73 ms 12660 KiB
10_random_25 AC 90 ms 13556 KiB
10_random_26 AC 55 ms 8484 KiB
10_random_27 AC 77 ms 12860 KiB
10_random_28 AC 96 ms 13872 KiB
10_random_29 AC 94 ms 13756 KiB
10_random_30 AC 60 ms 8936 KiB
10_random_31 AC 19 ms 4888 KiB
10_random_32 AC 67 ms 9496 KiB
10_random_33 AC 50 ms 8244 KiB
10_random_34 AC 93 ms 13744 KiB
10_random_35 AC 83 ms 12948 KiB
10_random_36 AC 46 ms 7984 KiB
10_random_37 AC 86 ms 13300 KiB
10_random_38 AC 17 ms 4568 KiB
10_random_39 AC 40 ms 6772 KiB
11_min_00 AC 3 ms 3480 KiB
12_max_00 AC 98 ms 14400 KiB
12_max_01 AC 102 ms 14236 KiB
12_max_02 AC 99 ms 14376 KiB
12_max_03 AC 100 ms 14416 KiB
12_max_04 AC 100 ms 14400 KiB
12_max_05 AC 100 ms 14268 KiB
12_max_06 AC 100 ms 14300 KiB
12_max_07 AC 101 ms 14360 KiB
12_max_08 AC 106 ms 14376 KiB
90_challenge_00 AC 93 ms 15040 KiB
90_challenge_01 AC 94 ms 15064 KiB
90_challenge_02 AC 92 ms 15072 KiB
91_challenge_00 AC 95 ms 17572 KiB
91_challenge_01 AC 95 ms 17740 KiB
91_challenge_02 AC 93 ms 17656 KiB