結果
問題 |
No.3129 Multiple of Twin Subarray
|
ユーザー |
![]() |
提出日時 | 2025-04-26 01:26:21 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 77 ms / 2,000 ms |
コード長 | 1,276 bytes |
コンパイル時間 | 4,663 ms |
コンパイル使用メモリ | 279,964 KB |
実行使用メモリ | 11,096 KB |
最終ジャッジ日時 | 2025-04-26 01:26:30 |
合計ジャッジ時間 | 7,542 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 46 |
ソースコード
#include <bits/stdc++.h> //#include <atcoder/all> using namespace std; //using namespace atcoder; using lli=long long int; using vl=vector<lli>; #define rep(i,s,e) for(lli i=s;i<e;i++) #define rrep(i,s,e) for(int i=s-1;i>=e;i--) #define vecl(v,s) vl v(s); rep(i,0,s) cin >> v.at(i); using pll=pair<lli,lli>; #define mp(f,s) make_pair(f,s) #define fi first #define se second using vpll=vector<pll>; #define vecpll(v,s) vpll v(s); rep(i,0,s) cin >> v.at(i).fi >> v.at(i).se; #define print(s) cout << s << endl; const lli LL_INF=1ll<<60; int main() { int n; cin >> n; vecl(a,n); // l...[1,i] r...[i,N] // {max,min} vpll l(n+1),r(n+2); l[0]=mp(-LL_INF,LL_INF); l[1]=mp(a[0],a[0]); lli csum=a[0],cmin=min(a[0],0ll),cmax=max(a[0],0ll); rep(i,2,n+1){ csum+=a[i-1]; cmin=min(cmin,csum); cmax=max(cmax,csum); l[i]=mp(max(l[i-1].fi,csum-cmin),min(l[i-1].se,csum-cmax)); } r[n+1]=mp(-LL_INF,LL_INF); r[n]=mp(a[n-1],a[n-1]); csum=a[n-1],cmin=min(a[n-1],0ll),cmax=max(a[n-1],0ll); rrep(i,n,1){ csum+=a[i-1]; cmin=min(cmin,csum); cmax=max(cmax,csum); r[i]=mp(max(r[i+1].fi,csum-cmin),min(r[i+1].se,csum-cmax)); } lli ans=-LL_INF; rep(i,1,n){ ans=max(ans,max(l[i].fi*r[i+1].fi,l[i].se*r[i+1].se)); } print(ans); }