結果
| 問題 |
No.2488 Mod Sum Maximization
|
| コンテスト | |
| ユーザー |
pockyny
|
| 提出日時 | 2023-10-29 22:36:06 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,901 ms / 2,000 ms |
| コード長 | 1,136 bytes |
| コンパイル時間 | 5,512 ms |
| コンパイル使用メモリ | 144,132 KB |
| 最終ジャッジ日時 | 2025-02-17 16:55:30 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 38 |
ソースコード
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#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(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
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