Submission #180287

#TimeUsernameProblemLanguageResultExecution timeMemory
180287MvCHacker (BOI15_hac)C++11
100 / 100
314 ms8952 KiB
#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> #define rc(x) return cout<<x<<endl,0 #define pb push_back #define mkp make_pair #define in insert #define er erase #define fd find #define fr first #define sc second typedef long long ll; typedef long double ld; const ll INF=0x3f3f3f3f3f3f3f3f; const ll llinf=(1LL<<62); const int inf=(1<<30); const int nmax=5e5+50; const int mod=1e9+7; using namespace std; int n,i,st[4*nmax],a[nmax],cur,tot,rs,j; int tr(int x) { x+=n; x%=n; if(!x)x=n; return x; } void upd(int x,int l,int r,int p,int v) { if(l==r) { st[x]=v; return; } int mid=(l+r)/2; if(p<=mid)upd(2*x,l,mid,p,v); else upd(2*x+1,mid+1,r,p,v); st[x]=max(st[2*x],st[2*x+1]); } int qry(int x,int l,int r,int tl,int tr) { if(tl>tr || tl>n || tr>n || tl<1 || tr<1)return 0; if(l>tr || tl>r)return 0; if(tl<=l && r<=tr)return st[x]; int mid=(l+r)/2; return max(qry(2*x,l,mid,tl,tr),qry(2*x+1,mid+1,r,tl,tr)); } int main() { //freopen("sol.in","r",stdin); //freopen("sol.out","w",stdout); //mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0); cin>>n; for(i=1;i<=n;i++)cin>>a[i],tot+=a[i]; for(i=1;i<=n/2;i++)cur+=a[i]; for(j=1;j<=n;j++,i++) { i=tr(i); upd(1,1,n,j,cur); cur-=a[tr(i-n/2)]; cur+=a[tr(i)]; } for(i=1;i<=n;i++) { //cout<<i<<" "<<1<<" "<<i-n/2<<" "<<i+1<<" "<<tr(i-n/2)<<endl; cur=qry(1,1,n,1,i-n/2); if(i+1<=tr(i-n/2))cur=max(cur,qry(1,1,n,i+1,tr(i-n/2))); else if(i+1>tr(i-n/2))cur=max(cur,max(qry(1,1,n,i+1,n),qry(1,1,n,1,tr(i-n/2)))); rs=max(rs,tot-cur); } cout<<rs<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...