Submission #1299314

#TimeUsernameProblemLanguageResultExecution timeMemory
1299314hanguyendanghuyHacker (BOI15_hac)C++20
100 / 100
110 ms20388 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=5e5+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...