提出 #44024750
ソースコード 拡げる
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <atcoder/segtree>
using namespace atcoder;
using namespace std;
using ll = long long int;
const ll INF = 1LL << 60;
ll op_max(ll a, ll b) {
return max(a, b);
}
ll e() {
return -INF;
}
int main() {
int N; cin >> N;
vector<ll> A(N);
for(int i=0; i<N; i++) {
cin >> A[i];
}
vector<int> lim1(N), lim2(N);
stack< pair<ll, int> > st;
// k < i かつ A[k] >= A[i] を満たす最大の添字を探す
st.emplace(INF, 0);
for(int i=0; i<N; i++) {
while(st.top().first < A[i]) st.pop();
lim1[i] = st.top().second;
st.emplace(A[i], i + 1);
}
st.pop();
// k < i かつ A[k] <= A[i] を満たす最大の添字を探す
st.emplace(-INF, 0);
for(int i=0; i<N; i++) {
while(st.top().first > A[i]) st.pop();
lim2[i] = st.top().second;
st.emplace(A[i], i + 1);
}
segtree<ll, op_max, e> seg1(N+1);
segtree<ll, op_max, e> seg2(N+1);
seg1.set(0, -A[0]);
seg2.set(0, +A[0]);
vector<ll> dp(N+1, -INF);
dp[0] = 0;
for(int i=0; i<N; i++) {
// 部分列に含めない場合
dp[i+1] = max(dp[i+1], dp[i]);
// 部分列の最大値として使う場合
ll v1 = seg1.prod(lim1[i], i);
dp[i+1] = max(dp[i+1], v1 + A[i]);
// 部分列の最小値として使う場合
ll v2 = seg2.prod(lim2[i], i);
dp[i+1] = max(dp[i+1], v2 - A[i]);
if (i + 1 < N) {
seg1.set(i+1, dp[i+1] - A[i+1]);
seg2.set(i+1, dp[i+1] + A[i+1]);
}
}
cout << dp[N] << endl;
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - Good Partition |
| ユーザ | tsutaj |
| 言語 | C++ (GCC 9.2.1) |
| 得点 | 600 |
| コード長 | 1776 Byte |
| 結果 | AC |
| 実行時間 | 103 ms |
| メモリ | 19388 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 | 7 ms | 3388 KiB |
| 00_sample_01 | AC | 2 ms | 3428 KiB |
| 10_random_00 | AC | 84 ms | 15060 KiB |
| 10_random_01 | AC | 95 ms | 15864 KiB |
| 10_random_02 | AC | 61 ms | 9596 KiB |
| 10_random_03 | AC | 87 ms | 15312 KiB |
| 10_random_04 | AC | 16 ms | 4476 KiB |
| 10_random_05 | AC | 75 ms | 14596 KiB |
| 10_random_06 | AC | 74 ms | 14472 KiB |
| 10_random_07 | AC | 22 ms | 5760 KiB |
| 10_random_08 | AC | 38 ms | 6480 KiB |
| 10_random_09 | AC | 62 ms | 10056 KiB |
| 10_random_10 | AC | 12 ms | 4016 KiB |
| 10_random_11 | AC | 39 ms | 8664 KiB |
| 10_random_12 | AC | 62 ms | 10248 KiB |
| 10_random_13 | AC | 29 ms | 6168 KiB |
| 10_random_14 | AC | 58 ms | 9476 KiB |
| 10_random_15 | AC | 60 ms | 9896 KiB |
| 10_random_16 | AC | 69 ms | 10172 KiB |
| 10_random_17 | AC | 8 ms | 3508 KiB |
| 10_random_18 | AC | 51 ms | 9228 KiB |
| 10_random_19 | AC | 12 ms | 3828 KiB |
| 10_random_20 | AC | 66 ms | 10084 KiB |
| 10_random_21 | AC | 78 ms | 14904 KiB |
| 10_random_22 | AC | 77 ms | 14624 KiB |
| 10_random_23 | AC | 45 ms | 9084 KiB |
| 10_random_24 | AC | 73 ms | 14580 KiB |
| 10_random_25 | AC | 85 ms | 15184 KiB |
| 10_random_26 | AC | 55 ms | 9424 KiB |
| 10_random_27 | AC | 76 ms | 14520 KiB |
| 10_random_28 | AC | 94 ms | 15880 KiB |
| 10_random_29 | AC | 91 ms | 15456 KiB |
| 10_random_30 | AC | 61 ms | 9540 KiB |
| 10_random_31 | AC | 24 ms | 4764 KiB |
| 10_random_32 | AC | 59 ms | 9984 KiB |
| 10_random_33 | AC | 50 ms | 9240 KiB |
| 10_random_34 | AC | 91 ms | 15872 KiB |
| 10_random_35 | AC | 77 ms | 14612 KiB |
| 10_random_36 | AC | 47 ms | 9204 KiB |
| 10_random_37 | AC | 85 ms | 15192 KiB |
| 10_random_38 | AC | 17 ms | 4516 KiB |
| 10_random_39 | AC | 39 ms | 6504 KiB |
| 11_min_00 | AC | 2 ms | 3456 KiB |
| 12_max_00 | AC | 97 ms | 15880 KiB |
| 12_max_01 | AC | 94 ms | 15888 KiB |
| 12_max_02 | AC | 98 ms | 15924 KiB |
| 12_max_03 | AC | 97 ms | 15992 KiB |
| 12_max_04 | AC | 98 ms | 15928 KiB |
| 12_max_05 | AC | 98 ms | 15884 KiB |
| 12_max_06 | AC | 97 ms | 15928 KiB |
| 12_max_07 | AC | 97 ms | 16108 KiB |
| 12_max_08 | AC | 98 ms | 15928 KiB |
| 90_challenge_00 | AC | 103 ms | 19232 KiB |
| 90_challenge_01 | AC | 103 ms | 19304 KiB |
| 90_challenge_02 | AC | 103 ms | 19268 KiB |
| 91_challenge_00 | AC | 102 ms | 19228 KiB |
| 91_challenge_01 | AC | 101 ms | 19304 KiB |
| 91_challenge_02 | AC | 102 ms | 19388 KiB |