結果
| 問題 |
No.3050 Prefix Removal
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-03-07 22:27:36 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 986 bytes |
| コンパイル時間 | 4,407 ms |
| コンパイル使用メモリ | 255,584 KB |
| 実行使用メモリ | 31,516 KB |
| 最終ジャッジ日時 | 2025-03-07 22:27:47 |
| 合計ジャッジ時間 | 10,551 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 WA * 45 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using ll = long long;
using S = pair<ll,int>;
S op(S lhs, S rhs){return max(lhs, rhs);}
constexpr S e(){return make_pair(-(1ll << 62), -1);}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
ll n, k;
cin >> n >> k;
vector<ll> a(n);
for(auto &&v : a) cin >> v;
ll sv = 0, mx = -(1ll << 62);
int p = 0;
for(int i = 0; i < n; i++){
sv += a[i];
if(i >= k - 1 && sv > mx){
mx = sv;
p = i + 1;
}
}
vector<pair<ll,int>> sv2(n + 1);
sv2[n] = make_pair(0, n);
for(int i = n - 1; i >= 0; i--){
sv2[i] = make_pair(sv2[i + 1].first + a[i], i);
}
atcoder::segtree<S, op, e> seg(sv2);
ll ans = mx;
int l = 1;
for(int i = k - 2; i >= 0; i--){
int r = p - i;
auto pa = seg.prod(l, r);
ans += pa.first - sv2[p].first;
l = pa.second + 1;
}
cout << ans << '\n';
}