結果
| 問題 |
No.2488 Mod Sum Maximization
|
| コンテスト | |
| ユーザー |
pockyny
|
| 提出日時 | 2023-10-29 22:35:28 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 987 bytes |
| コンパイル時間 | 979 ms |
| コンパイル使用メモリ | 97,820 KB |
| 最終ジャッジ日時 | 2025-02-17 16:54:58 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 37 TLE * 1 |
ソースコード
#include <iostream>
#include <atcoder/lazysegtree>
using namespace std;
using namespace atcoder;
typedef int ll;
//range chmin range min
ll inf = 1000000000;
struct S{ll x;};
struct F{ll x;};
S op(S l,S r){return S{min(l.x,r.x)};}
S e(){return S{inf};}
S mapping(F l,S r){return S{min(l.x,r.x)};}
F compo(F l,F r){return F{min(l.x,r.x)};}
F id(){return F{inf};}
ll a[300010];
int main(){
int i,j,n; cin >> n;
for(i=0;i<n;i++) cin >> a[i];
const int mx = 1000000;
vector<S> v(mx + 1);
for(i=0;i<=mx;i++) v[i] = e();
lazy_segtree<S,op,e,F,mapping,compo,id> seg(v);
long long ans = 0;
for(i=0;i<n;i++) ans += a[i];
seg.set(a[0],S{0});
for(i=0;i<n;i++){
// cout << i << endl;
ll x = a[i];
ll c = a[i];
for(j=x;j<=mx;j+=x){
// cout << j << endl;
seg.apply(j,min((ll)mx + 1,j + x),F{seg.get(a[i]).x + c});
c += a[i];
}
}
cout << ans - seg.get(a[n - 1]).x << endl;
}
pockyny