Submission #131186

#TimeUsernameProblemLanguageResultExecution timeMemory
131186youssefbou62Hacker (BOI15_hac)C++14
100 / 100
441 ms14560 KiB
#include  <bits/stdc++.h>

using namespace std;

#define mp make_pair
#define fi first
#define se second
#define all(v) v.begin(),v.end()
#define allarr(a) a , a + n
#define ll long long
#define ull unsigned long long 
#define pb push_back
#define fastio ios_base::sync_with_stdio(false) ; cin.tie(NULL); cout.tie(NULL)
typedef pair<int, int> pi;
typedef pair<ll,ll> pll; 
typedef pair<int,pi> trp ;
typedef vector<pi> vpi;
typedef vector<pll> vpll ;
// int ab  (int  x ) { return (x>0?x:-x); }

const int N = 500005 ;
int a[N] , pref[N],n,st[N*4]; 


void update(int uL , int uR , int i , int j , int u , int val ){
	// cout << i << " " << j <<endl; 
	if( i > j )return ; 
	if( i >= uL && j <= uR ){
		st[u] = min ( st[u] , val ) ; 
		return ; 
	}
	if( i > uR || j < uL )return ; 
	int l = u*2 + 1 , r = u*2+2 , mid = (i+j)/2 ; 
	update(uL,uR,i,mid,l,val) ; 
	update(uL,uR,mid+1,j,r,val) ;
}

int query (int i , int x , int y , int u){
	// cout << "querey"<<endl; 
	if( x > y )return 1e9; 
	if( x == y ){
		return st[u]; 
	}
	int l = u*2+1 , r = u*2+2 , mid = (x+y)/2 ;
	if( i <= mid )return min(st[u],query(i,x,mid,l)); 
	return min ( st[u] , query(i,mid+1,y,r)); 
}

int sum(int l , int r ){
	if( l > r )return 0; 
	if( l == 0 )return pref[r]; 
	return pref[r]-pref[l-1] ; 
}

int main(){
cin >> n ; 
for(int i = 0 ; i < 4*N ; i++ )st[i]=1e9; 
for(int i= 0 ;  i< n ; i++ )cin >> a[i] ; 
pref[0] = a[0] ; 
for(int i =  1 ; i < n ; i++ ){
	pref[i] = pref[i-1] + a[i] ; 
}
int ans = 0; 
for(int start = 0 ; start < n ; start ++ ){
	int end = min(n-1,start+(n/2)-!(n%2)); 
	int v0 = sum(start,end); 
	int res = (n/2+n%2) - (n-start) ; 
	int v1 = sum(0,res-1) ; 
	update(start,end,0,n-1,0,v1+v0)   ; 
	update(0,res-1,0,n-1,0,v1+v0)   ; 
}
for(int i = 0 ; i < n ; i++ ){
	ans = max ( ans , query(i,0,n-1,0)); 
}
cout << ans << endl ; 
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...