Files
java-competitive/archive/2017.10/2017.10.16 - unsorted/D.java
2019-03-15 13:47:54 +04:00

92 lines
1.5 KiB
Java

package chelper;
import io.InputReader;
import io.OutputWriter;
import misc.SimpleSavingChelperSolution;
public class D extends SimpleSavingChelperSolution {
public void solve(int testNumber, InputReader in, OutputWriter out) {
wrapSolve(testNumber, in, out);
}
class Node {
int l, r, m;
int sum;
Node cl, cr;
Node(int l, int r) {
this.l = l;
this.r = r;
m = (l + r) / 2;
sum = 0;
if (r - l > 1) {
cl = new Node(l, m);
cr = new Node(m, r);
}
}
void add(int x) {
sum++;
if (r - l > 1) {
if (x < m) {
cl.add(x);
} else {
cr.add(x);
}
}
}
int sum(int ll, int rr) {
if (ll == l && rr == r) {
return sum;
}
int ans = 0;
if (ll < m) {
ans += cl.sum(ll, Math.min(m, rr));
}
if (rr > m) {
ans += cr.sum(Math.max(m, ll), rr);
}
return ans;
}
}
@Override
public void solve(int testNumber) {
int n = in.nextInt();
out.print(1 + " ");
Node root = new Node(0, n);
for (int totalSum = 1; totalSum <= n; totalSum++) {
root.add(in.nextInt() - 1);
int l = 0;
int r = n + 1;
while (r - l > 1) {
int m = (l + r) / 2;
int x = root.sum(n - m, n);
if (x == m) {
l = m;
} else {
r = m;
}
}
out.print((totalSum - l + 1) + " ");
// out.println(root.sum(0, n));
}
}
}