Submission #40605

#TimeUsernameProblemLanguageResultExecution timeMemory
40605HassoonyHacker (BOI15_hac)C++14
100 / 100
320 ms35580 KiB
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
typedef unsigned long long ll;
typedef double D;
const ll inf=(1ll<<61);
const ll mod=1e9+7;
const int MX=5e5+9;
int n,a[MX],sums[MX],k;
ll b[MX];
ll seg[MX*6];
void build(int node,int l,int r){
    if(l==r){
        seg[node]=b[l];
        return;
    }
    int mid=(l+r)/2;
    build(node*2,l,mid);
    build(node*2+1,mid+1,r);
    seg[node]=min(seg[node*2],seg[node*2+1]);
}
ll q(int node,int l,int r,int s,int e){
    if(l>e||r<s)return inf;
    if(l>=s&&r<=e)return seg[node];
    int mid=(l+r)/2;
    return min(q(node*2,l,mid,s,e),q(node*2+1,mid+1,r,s,e));
}
int main(){
    cin>>n;
    k=(n/2)+(n%2);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        sums[i]=a[i];
        if(i)sums[i]+=sums[i-1];
    }
    for(int i=0;i<n;i++){
        if(i+k-1<n){
            b[i]=sums[i+k-1];
            if(i)b[i]-=sums[i-1];
            continue;
        }
        b[i]=sums[n-1]-sums[i-1];
        int x=k-(n-i);
        b[i]+=sums[x-1];
    }
    build(1,0,n-1);
    ll ans=0;
    for(int i=0;i<n;i++){
        ll mn=inf;
        if(i-k+1>=0){
            mn=q(1,0,n-1,i-k+1,i);
        }
        else {
            mn=q(1,0,n-1,0,i);
            int x=i+1;
            x=k-x;
            mn=min(mn,q(1,0,n-1,n-x,n-1));
        }
        ans=max(ans,mn);
    }
    cout<<ans<<endl;
}

Compilation message (stderr)

hac.cpp: In function 'int main()':
hac.cpp:32:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",&a[i]);
                          ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...