import java.io.StringReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Optional;
import java.util.Scanner;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
class Stacker {
private final Deque<Integer> stack = new ArrayDeque<>();
public Optional
<Integer
> processOperation
(String op
) { char opc = op.charAt(0);
switch(opc) {
case '1':
int previous
= stack.
isEmpty() ? Integer.
MIN_VALUE : stack.
peek(); int max
= Math.
max(previous,
Integer.
parseInt(op.
substring(1).
trim())); stack.push(max);
return Optional.empty();
case '2':
if (stack.isEmpty()) {
}
stack.pop();
return Optional.empty();
case '3':
if (stack.isEmpty()) {
}
return Optional.of(stack.peek());
default:
}
}
public static void main
(String[] args
) { "1 97\n" +
"2\n" +
"1 20\n" +
"2\n" +
"1 26\n" +
"1 20\n" +
"2\n" +
"3\n" +
"1 91\n" +
"3";
try (Scanner scanner
= new Scanner
(new StringReader(testdata
))) { scanner.useDelimiter("\\s*\\n");
int count
= Integer.
parseInt(scanner.
next()); // convert STDIN lines to a stream
Stream<String> commands = StreamSupport.stream(Spliterators.spliterator(scanner, count, Spliterator.ORDERED), false);
// process the operations:
Stacker stacker = new Stacker();
String report
= commands.
map(stacker
::processOperation
) .filter(Optional::isPresent)
.
map(opt
-> String.
valueOf(opt.
get())) .collect(Collectors.joining("\n"));
}
}
}
aW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwppbXBvcnQgamF2YS51dGlsLkFycmF5RGVxdWU7CmltcG9ydCBqYXZhLnV0aWwuRGVxdWU7CmltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7CmltcG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsKaW1wb3J0IGphdmEudXRpbC5TcGxpdGVyYXRvcjsKaW1wb3J0IGphdmEudXRpbC5TcGxpdGVyYXRvcnM7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtU3VwcG9ydDsKCmNsYXNzIFN0YWNrZXIgewoJCglwcml2YXRlIGZpbmFsIERlcXVlPEludGVnZXI+IHN0YWNrID0gbmV3IEFycmF5RGVxdWU8PigpOwoJCglwdWJsaWMgT3B0aW9uYWw8SW50ZWdlcj4gcHJvY2Vzc09wZXJhdGlvbihTdHJpbmcgb3ApIHsKCQljaGFyIG9wYyA9IG9wLmNoYXJBdCgwKTsKCQlzd2l0Y2gob3BjKSB7CgkJY2FzZSAnMSc6CgkJCWludCBwcmV2aW91cyA9IHN0YWNrLmlzRW1wdHkoKSA/IEludGVnZXIuTUlOX1ZBTFVFIDogc3RhY2sucGVlaygpOwoJCQlpbnQgbWF4ID0gTWF0aC5tYXgocHJldmlvdXMsIEludGVnZXIucGFyc2VJbnQob3Auc3Vic3RyaW5nKDEpLnRyaW0oKSkpOwoJCQlzdGFjay5wdXNoKG1heCk7CgkJCXJldHVybiBPcHRpb25hbC5lbXB0eSgpOwoJCWNhc2UgJzInOgoJCQlpZiAoc3RhY2suaXNFbXB0eSgpKSB7CgkJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgcG9wIGVtcHR5IHN0YWNrIik7CgkJCX0KCQkJc3RhY2sucG9wKCk7CgkJCXJldHVybiBPcHRpb25hbC5lbXB0eSgpOwoJCWNhc2UgJzMnOgoJCQlpZiAoc3RhY2suaXNFbXB0eSgpKSB7CgkJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgbWF4IGVtcHR5IHN0YWNrIik7CgkJCX0KCQkJcmV0dXJuIE9wdGlvbmFsLm9mKHN0YWNrLnBlZWsoKSk7CgkJZGVmYXVsdDoKCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5rbm93biBvcGVyYXRpb246IiArIG9wKTsKCQl9Cgl9CgkKCQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJU3RyaW5nIHRlc3RkYXRhID0gIjEwXG4iICsgCgkJCQkiMSA5N1xuIiArIAoJCQkJIjJcbiIgKyAKCQkJCSIxIDIwXG4iICsgCgkJCQkiMlxuIiArIAoJCQkJIjEgMjZcbiIgKyAKCQkJCSIxIDIwXG4iICsgCgkJCQkiMlxuIiArIAoJCQkJIjNcbiIgKyAKCQkJCSIxIDkxXG4iICsgCgkJCQkiMyI7CgkJCgkJdHJ5IChTY2FubmVyIHNjYW5uZXIgPSBuZXcgU2Nhbm5lcihuZXcgU3RyaW5nUmVhZGVyKHRlc3RkYXRhKSkpIHsKCQkJc2Nhbm5lci51c2VEZWxpbWl0ZXIoIlxccypcXG4iKTsKCQkJaW50IGNvdW50ID0gSW50ZWdlci5wYXJzZUludChzY2FubmVyLm5leHQoKSk7CgkJCS8vIGNvbnZlcnQgU1RESU4gbGluZXMgdG8gYSBzdHJlYW0KCQkJU3RyZWFtPFN0cmluZz4gY29tbWFuZHMgPSBTdHJlYW1TdXBwb3J0LnN0cmVhbShTcGxpdGVyYXRvcnMuc3BsaXRlcmF0b3Ioc2Nhbm5lciwgY291bnQsIFNwbGl0ZXJhdG9yLk9SREVSRUQpLCBmYWxzZSk7CgkJCS8vIHByb2Nlc3MgdGhlIG9wZXJhdGlvbnM6CgkJCVN0YWNrZXIgc3RhY2tlciA9IG5ldyBTdGFja2VyKCk7CgkJCVN0cmluZyByZXBvcnQgPSBjb21tYW5kcy5tYXAoc3RhY2tlcjo6cHJvY2Vzc09wZXJhdGlvbikKCQkJCQkuZmlsdGVyKE9wdGlvbmFsOjppc1ByZXNlbnQpCgkJCQkJLm1hcChvcHQgLT4gU3RyaW5nLnZhbHVlT2Yob3B0LmdldCgpKSkKCQkJCQkuY29sbGVjdChDb2xsZWN0b3JzLmpvaW5pbmcoIlxuIikpOwoJCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVwb3J0KTsKCQl9Cgl9Cgp9Cg==