Submission #1299313

#TimeUsernameProblemLanguageResultExecution timeMemory
1299313hanguyendanghuyHacker (BOI15_hac)C++20
40 / 100
66 ms15472 KiB
#include <bits/stdc++.h> using namespace std; #define yes cout<<"YES"<<'\n' #define no cout<<"NO"<<'\n' #define si size() #define fi first #define se second #define ll long long #define sr sort #define pb push_back #define all(x) x.begin(),x.end() constexpr ll MAXN=4e5+5,INF=1e18,MOD=1e9+7; ll n,m,i,j,k,p,t,a[MAXN],pref[MAXN],val[MAXN],mapre[MAXN],masuf[MAXN]; ll tinhleft(ll i,ll lenA){ ll sum=a[i]; sum+=pref[min(n,i+lenA)]-pref[i]; lenA-=min(n,i+lenA)-i; sum+=pref[lenA]; return sum; } ll tinhright(ll i,ll lenA){ ll sum=a[i]; sum+=pref[i-1]-pref[max(1ll,i-lenA)-1]; lenA-=i-max(1ll,i-lenA); sum+=pref[n]-pref[n-lenA]; return sum; } struct seg{ ll b[4*MAXN]; void build(ll in,ll l,ll r){ if(l==r) b[in]=val[l]; else { ll m=(l+r)/2; build(in*2,l,m); build(in*2+1,m+1,r); b[in]=max(b[in*2],b[in*2+1]); } } ll get(ll in,ll l,ll r,ll l1,ll r1){ if(l>r1||r<l1) return 0; else if(l>=l1&&r<=r1) return b[in]; else{ ll m=(l+r)/2; return max(get(in*2,l,m,l1,r1),get(in*2+1,m+1,r,l1,r1)); } } } seg; int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); #define name "test" if(fopen(name".inp","r")){ freopen(name".inp","r",stdin); freopen(name".out","w",stdout); } cin>>n; for(i=1;i<=n;i++){ cin>>a[i]; pref[i]=a[i]+pref[i-1]; } ll lenA=(n+1)/2,lenB=n-lenA,ans=0; lenA--; lenB--; for(i=1;i<=n;i++) val[i]=tinhleft(i,lenB); seg.build(1,1,n); ll l=1,r=1; for(i=1;i<=n;i++){ ll sumA=0,sumB=0; if(i>lenB+1) sumA=seg.get(1,1,n,1,i-lenB-1); ll r=min(0ll,i-lenB-1)+n; sumB=seg.get(1,1,n,i+1,r); ans=max(ans,pref[n]-max(sumA,sumB)); } cout<<ans; return 0; }

Compilation message (stderr)

hac.cpp: In function 'int main()':
hac.cpp:54:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   54 |         freopen(name".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
hac.cpp:55:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   55 |         freopen(name".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...