結果
| 問題 | No.3760 Streaming Schedule |
| コンテスト | |
| ユーザー |
shinchan
|
| 提出日時 | 2026-10-09 22:11:56 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 4,317 bytes |
| 記録 | |
| コンパイル時間 | 1,920 ms |
| コンパイル使用メモリ | 340,108 KB |
| 実行使用メモリ | 18,656 KB |
| 最終ジャッジ日時 | 2026-10-09 22:12:02 |
| 合計ジャッジ時間 | 5,479 ms |
|
ジャッジサーバーID (参考情報) |
judge4_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 45 WA * 2 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define all(v) (v).begin(),(v).end()
#define pb emplace_back
#define rep(i, n) for(int i=0;i<(n);i++)
#define foa(e, v) for(auto& e : v)
#define dout(a) cout<<fixed<<setprecision(10)<<a<<'\n';
#define Cout(a) cout<<a<<'\n';
using ll = long long;
using ld = long double;
using Int = __int128;
template <class T> using pqr = priority_queue<T, vector<T>, greater<T>>;
template <typename T1, typename T2> inline bool chmax(T1 &a, T2 b) {
bool compare = a < b;
if(compare) a = b;
return compare;
}
template <typename T1, typename T2> inline bool chmin(T1 &a, T2 b) {
bool compare = a > b;
if(compare) a = b;
return compare;
}
template <typename T> inline T back(std::set<T> &s) {
return *s.rbegin();
}
template <typename T> inline T back(std::multiset<T> &s) {
return *s.rbegin();
}
template <typename T> inline T pop_back(std::set<T> &s) {
auto it = prev(s.end());
T val = *it;
s.erase(it);
return val;
}
template <typename T> inline T pop_back(std::multiset<T> &s) {
auto it = prev(s.end());
T val = *it;
s.erase(it);
return val;
}
const int dy[8] = {-1, 0, 0, 1, 1, -1, 1, -1};
const int dx[8] = {0, -1, 1, 0, -1, -1, 1, 1};
const ll MOD7 = 1000000007, MOD998 = 998244353, INF = (3LL << 59);
const int inf = 1 << 30;
const char br = '\n';
template<class S, S (*op)(S, S), S (*e)()> struct segtree {
public:
explicit segtree(int n) : segtree(vector<S>(n, e())) {}
explicit segtree(const vector<S>& v) : _n(int(v.size())) {
size = 1;
while(size < _n) size *= 2;
log = __builtin_ctz(size);
d = vector<S>(2 * size, e());
for(int i = 0; i < _n; i++) d[size + i] = v[i];
for(int i = size - 1; i >= 1; i--) { update(i); }
}
void set(int p, S x) {
p += size;
d[p] = x;
for(int i = 1; i <= log; i++) update(p >> i);
}
S get(int p) const { return d[p + size]; }
S prod(int l, int r) const {
S sml = e(), smr = e();
l += size;
r += size;
while(l < r) {
if(l & 1) sml = op(sml, d[l++]);
if(r & 1) smr = op(d[--r], smr);
l >>= 1;
r >>= 1;
}
return op(sml, smr);
}
S all_prod() const { return d[1]; }
template<class F> int max_right(int l, F f) {
if(l == _n) return _n;
l += size;
S sm = e();
do {
while(l % 2 == 0) l >>= 1;
if(!f(op(sm, d[l]))) {
while(l < size) {
l = (2 * l);
if(f(op(sm, d[l]))) {
sm = op(sm, d[l]);
l++;
}
}
return l - size;
}
sm = op(sm, d[l]);
l++;
} while((l & -l) != l);
return _n;
}
template<class F> int min_left(int r, F f) {
if(r == 0) return 0;
r += size;
S sm = e();
do {
r--;
while(r > 1 && (r % 2)) r >>= 1;
if(!f(op(d[r], sm))) {
while(r < size) {
r = (2 * r + 1);
if(f(op(d[r], sm))) {
sm = op(d[r], sm);
r--;
}
}
return r + 1 - size;
}
sm = op(d[r], sm);
} while((r & -r) != r);
return 0;
}
private:
int _n, size, log;
vector<S> d;
void update(int k) { d[k] = op(d[2 * k], d[2 * k + 1]); }
};
ll op(ll a, ll b) {
return max(a, b);
}
ll e() {
return -INF;
}
void solve() {
ll n, b, c; cin >> n >> b >> c;
vector<ll> a(n + 2, 0);
rep(i, n) cin >> a[i];
n += 2;
vector<ll> sum(n + 1, 0);
rep(i, n) sum[i + 1] = sum[i] + a[i];
vector<ll> dp(n + 1, -INF);
dp[0] = 0;
segtree<ll, op, e> seg(dp);
ll ans = -INF;
for(int i = 1; i <= n; i ++) {
ll num = seg.prod(max(0LL, i - c), i) + sum[i - 1];
chmax(ans, num);
seg.set(i, num - sum[i]);
}
cout << ans << endl;
}
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
int testcase = 1;
// cin >> testcase;
while(testcase --) solve();
return 0;
}
shinchan