import
java.io.IOException;
import
java.io.InputStream;
import
java.util.*;
class
MyComp
implements
Comparator<Piece> {
public
int
compare(Piece p1, Piece p2)
{
if
(p2.val != p1.val)
return
p2.val - p1.val;
if
(p1.start != p2.start)
return
p2.start - p1.start;
return
0
;
}
}
class
Piece {
int
start;
int
end;
int
val;
Piece(
int
s,
int
e,
int
v)
{
start = s;
end = e;
val = v;
}
}
class
GFG {
static
void
solve(
int
n,
int
k,
int
cuts[],
int
A[])
{
int
sum[] =
new
int
[n];
sum[
0
] = A[
0
];
for
(
int
i =
1
; i < n; i++)
sum[i] = sum[i -
1
] + A[i];
TreeSet<Integer> t =
new
TreeSet<>();
TreeSet<Piece> pq =
new
TreeSet<>(
new
MyComp());
Piece temp[] =
new
Piece[n];
temp[
0
] =
new
Piece(
0
, n -
1
, sum[n -
1
]);
pq.add(temp[
0
]);
t.add(
0
);
for
(
int
i =
0
; i < k; i++) {
int
curr = t.floor(cuts[i]);
pq.remove(temp[curr]);
int
end = temp[curr].end;
temp[curr]
=
new
Piece(curr, cuts[i],
sum[cuts[i]]
- (curr ==
0
?
0
: sum[curr -
1
]));
pq.add(temp[curr]);
temp[cuts[i] +
1
]
=
new
Piece(cuts[i] +
1
,
end, sum[end] - sum[cuts[i]]);
pq.add(temp[cuts[i] +
1
]);
t.add(curr);
t.add(cuts[i] +
1
);
System.out.println(pq.first().val);
}
}
public
static
void
main(String[] args)
{
int
A[] = {
4
,
5
,
6
,
7
,
8
};
int
n = A.length;
int
cuts[] = {
0
,
2
,
3
,
1
};
int
k = cuts.length;
solve(n, k, cuts, A);
}
}