結果
問題 | No.3129 Multiple of Twin Subarray |
ユーザー |
![]() |
提出日時 | 2025-04-25 23:01:43 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 81 ms / 2,000 ms |
コード長 | 1,950 bytes |
コンパイル時間 | 3,715 ms |
コンパイル使用メモリ | 279,468 KB |
実行使用メモリ | 11,096 KB |
最終ジャッジ日時 | 2025-04-25 23:02:42 |
合計ジャッジ時間 | 7,550 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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 ld=long double; using vi=vector<int>; using vvi=vector<vi>; using vvvi=vector<vvi>; using vvvvi=vector<vvvi>; using vl=vector<lli>; using vvl=vector<vl>; #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 in(v,seq) for(auto v:seq) #define veci(v,s) vi v(s); rep(i,0,s) cin >> v.at(i); #define vecl(v,s) vl v(s); rep(i,0,s) cin >> v.at(i); #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() using pii=pair<int,int>; using pll=pair<lli,lli>; #define mp(f,s) make_pair(f,s) #define fi first #define se second using vpii=vector<pii>; using vpll=vector<pll>; #define vecpii(v,s) vpii v(s); rep(i,0,s) cin >> v.at(i).fi >> v.at(i).se; #define vecpll(v,s) vpll v(s); rep(i,0,s) cin >> v.at(i).fi >> v.at(i).se; #define pub(x) push_back(x) #define puf(x) push_front(x) #define pob(x) pop_back(x) #define pof(x) pop_front(x) #define eb(x) emplace_back(x) #define print(s) cout << s << endl; const int I_INF=1<<30; const lli LL_INF=1ll<<60; const string alp="abcdefghijklmnopqrstuvwxyz"; const int let=alp.size(); // 26 int main() { int n; cin >> n; vecl(a,n); // max_min vpll l(n),r(n); l[0]=mp(a[0],a[0]); lli M=0,m=0; if(a[0]>0) M=a[0]; else m=a[0]; rep(i,1,n){ if(a[i]>0){ l[i]=mp(max(l[i-1].fi,M+a[i]),min(l[i-1].se,m)); }else{ l[i]=mp(max(l[i-1].fi,M),min(l[i-1].se,m+a[i])); } M=max(M+a[i],0ll); m=min(m+a[i],0ll); } r[n-1]=mp(a[n-1],a[n-1]); M=0,m=0; if(a[n-1]>0) M=a[n-1]; else m=a[n-1]; rrep(i,n-1,0){ if(a[i]>0){ r[i]=mp(max(r[i+1].fi,M+a[i]),min(r[i+1].se,m)); }else{ r[i]=mp(max(r[i+1].fi,M),min(r[i+1].se,m+a[i])); } M=max(M+a[i],0ll); m=min(m+a[i],0ll); } lli ans=-LL_INF; rep(i,0,n-1){ ans=max(ans,max(l[i].fi*r[i+1].fi,l[i].se*r[i+1].se)); } print(ans); }