IP
121.168.0.0
Created
05-21 05:41
1
import java.io.*;
2
import java.util.*;
3
class Main{
4
static int[] nu,num;
5
static boolean[] b;
6
static int n,id,mx=-1000;
7
static void dp(int div,int lt){
8
for(int i=0;i<lt;i++){
9
num[i]=nu[i+div]-nu[i];
10
if(mx<num[i]) mx=num[i];
11
}
12
}
13
static void add(int mt){
14
while(mt<n){
15
int lt=num.length-mt;
16
if(lt<0) break;
17
18
int[] mk=new int[lt];
19
for(int i=0;i<lt;i++){
20
mk[i]=num[i]+num[i+mt];
21
if(mx<mk[i]) mx=mk[i];
22
}
23
b[mt]=true;
24
num=mk;
25
mt*=2;
26
}
27
}
28
public static void main(String[] args)throws Exception{
29
BufferedReader I=new BufferedReader(new InputStreamReader(System.in));
30
n=Integer.parseInt(I.readLine());
31
StringTokenizer st=new StringTokenizer(I.readLine());
32
nu=new int[n+1];
33
for(int i=1;i<=n;i++){ //누적합 준비
34
int tn=Integer.parseInt(st.nextToken());
35
if(mx<tn) mx=tn;
36
nu[i]=nu[i-1]+tn;
37
}
38
b=new boolean[n+1];
39
for(int i=2;i<=n;i++){
40
if(!b[i]){
41
b[i]=true;
42
int lt=n+1-i;
43
num=new int[lt];
44
id=i;
45
dp(i,lt);
46
add(i);
47
}
48
}
49
System.out.print(mx);
50
}
51
}