結果
問題 |
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'; }