Submission #1171433

#TimeUsernameProblemLanguageResultExecution timeMemory
1171433LmaoLmaoHacker (BOI15_hac)C++20
100 / 100
288 ms18052 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
#define endl '\n'
using namespace std;

using ll = long long;
using ii = pair<int, int>;
using aa = array<ll,5>;

const int N = 1e6;
const int INF = 1e9;

int S[2000005],lz[2000005];
int pre[500005];

void push(int id) {
    S[id*2]=min(S[id*2],lz[id]);
    S[id*2+1]=min(S[id*2+1],lz[id]);
    lz[id*2]=min(lz[id*2],lz[id]);
    lz[id*2+1]=min(lz[id*2+1],lz[id]);
    lz[id]=1e9;
}
void update(int id,int l,int r,int u,int v,int val) {
    if(v < l || r < u) return;
    if(u<=l && r<=v) {
        //cout << l << ' ' << r << ' ' << id << endl;
        S[id]=min(S[id],val);
        lz[id]=min(lz[id],val);
        return;
    }
    push(id);
    int m=(l+r)/2;
    update(id*2,l,m,u,v,val);
    update(id*2+1,m+1,r,u,v,val);
    S[id]=min(S[id*2],S[id*2+1]);
}
int get(int id,int l,int r,int pos) {
    if(pos < l || r < pos) return 0;
    if(l==r) {
        return S[id];
    }
    push(id);
    int m=(l+r)/2;
    int t=get(id*2,l,m,pos);
    int t1=get(id*2+1,m+1,r,pos);
    return max(t,t1);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("CHONSO.inp", "r", stdin);
    //freopen("CHONSO.out", "w", stdout);
    int n;
    cin >> n;
    for(int i=1;i<=n*4;i++) {
        S[i]=1e9;
        lz[i]=1e9;
    }
    for(int i=1;i<=n;i++) {
        cin >> pre[i];
        pre[i]+=pre[i-1];
    }
    int k=(n+1)/2;
    for(int i=1;i<=n;i++) {
        ll sum,sum1;
        if(i<k) {
            sum=pre[i];
            sum+=pre[n]-pre[n-k+i];
            update(1,1,n,1,i,sum);
            update(1,1,n,n-k+i+1,n,sum);
            //cout << n << ' '<< endl;
        }
        else {
            sum=pre[i]-pre[i-k];
            update(1,1,n,i-k+1,i,sum);
        }
        //cout << get(1,1,n,2) << ' ';
    }
    int ans=0;
    for(int i=1;i<=n;i++) {
        //cout << get(1,1,n,i) << endl;
        ans=max(ans,get(1,1,n,i));
    }
    cout << ans;
    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...