/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
List
<Integer
> numbers
= Arrays.
asList(5,
10,
4,
-1); Ideone mm = new Ideone();
int maxi = mm.maximumm(numbers);
}
public int maximumm(List<Integer> numbers) {
int toIndex = 3, fromIndex = 0;
List<Integer> result = new ArrayList<>();
while (toIndex < numbers.size()) {
Map
<Integer, Integer
> map
= IntStream
.range(fromIndex, toIndex)
.filter(i->numbers.get(i)>0)
.
mapToObj(i
-> new AbstractMap.
SimpleEntry<>(i, numbers.
get(i
))) // find max of sublist
int maxOfSub
= numbers.
subList(fromIndex, toIndex
).
stream().
max(Integer::compareTo
).
get(); //update indexes
fromIndex = map.getOrDefault(maxOfSub,toIndex-1) + 2;
toIndex += fromIndex;
if (maxOfSub > 0)
result.add(maxOfSub);
}
int lastMax
= numbers.
subList(fromIndex, numbers.
size()).
stream().
max(Integer::compareTo
).
get(); if (lastMax > 0)
result.add(lastMax);
return result.
stream().
reduce(0,
Integer::sum
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkludFN0cmVhbTsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJIExpc3Q8SW50ZWdlcj4gbnVtYmVycyA9IEFycmF5cy5hc0xpc3QoNSwxMCw0LC0xKTsKICAgICAgICBJZGVvbmUgbW0gPSBuZXcgSWRlb25lKCk7CiAgICAgICAgaW50IG1heGkgPSBtbS5tYXhpbXVtbShudW1iZXJzKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWF4aSk7Cgl9CgkKCSBwdWJsaWMgaW50IG1heGltdW1tKExpc3Q8SW50ZWdlcj4gbnVtYmVycykgewogICAgICAgaW50IHRvSW5kZXggPSAzLCBmcm9tSW5kZXggPSAwOwogICAgICAgIExpc3Q8SW50ZWdlcj4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgd2hpbGUgKHRvSW5kZXggPCBudW1iZXJzLnNpemUoKSkgewogICAgICAgICAgICBNYXA8SW50ZWdlciwgSW50ZWdlcj4gbWFwID0gSW50U3RyZWFtCiAgICAgICAgICAgICAgICAgICAgLnJhbmdlKGZyb21JbmRleCwgdG9JbmRleCkKICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGktPm51bWJlcnMuZ2V0KGkpPjApCiAgICAgICAgICAgICAgICAgICAgLm1hcFRvT2JqKGkgLT4gbmV3IEFic3RyYWN0TWFwLlNpbXBsZUVudHJ5PD4oaSwgbnVtYmVycy5nZXQoaSkpKQogICAgICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9NYXAoTWFwLkVudHJ5OjpnZXRWYWx1ZSwgTWFwLkVudHJ5OjpnZXRLZXksKGEsYiktPmEpKTsKICAgICAgICAgICAgLy8gZmluZCBtYXggb2Ygc3VibGlzdAogICAgICAgICAgICBpbnQgbWF4T2ZTdWIgPSBudW1iZXJzLnN1Ykxpc3QoZnJvbUluZGV4LCB0b0luZGV4KS5zdHJlYW0oKS5tYXgoSW50ZWdlcjo6Y29tcGFyZVRvKS5nZXQoKTsKICAgICAgICAgICAgLy91cGRhdGUgaW5kZXhlcwogICAgICAgICAgICBmcm9tSW5kZXggPSBtYXAuZ2V0T3JEZWZhdWx0KG1heE9mU3ViLHRvSW5kZXgtMSkgKyAyOwogICAgICAgICAgICB0b0luZGV4ICs9IGZyb21JbmRleDsKCiAgICAgICAgICAgIGlmIChtYXhPZlN1YiA+IDApCiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG1heE9mU3ViKTsKICAgICAgICB9CiAgICAgICAgaW50IGxhc3RNYXggPSBudW1iZXJzLnN1Ykxpc3QoZnJvbUluZGV4LCBudW1iZXJzLnNpemUoKSkuc3RyZWFtKCkubWF4KEludGVnZXI6OmNvbXBhcmVUbykuZ2V0KCk7CiAgICAgICAgaWYgKGxhc3RNYXggPiAwKQogICAgICAgICAgICByZXN1bHQuYWRkKGxhc3RNYXgpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwoJCXJldHVybiByZXN1bHQuc3RyZWFtKCkucmVkdWNlKDAsSW50ZWdlcjo6c3VtKTsKICAgIH0KfQ==