提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |