Sponsors

Codeforces Round #412 (rated, Div. 1, based on VK Cup 2017 Round 3), problem: (E) Blog Post Rating Solution In JAVA

import static java.lang.Double.parseDouble;
import static java.lang.Integer.parseInt;
import static java.lang.Long.parseLong;
import static java.lang.Math.min;
import static java.lang.System.exit;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Random;
import java.util.StringTokenizer;

public class E {

static BufferedReader in;
static PrintWriter out;
static StringTokenizer tok;

static int left[], right[], value[], y[], size[], func[];
static int free;

static final Random rng = new Random();

static int create(int val) {
int res = free;
free = value[free];
left[res] = -1;
right[res] = -1;
value[res] = val;
size[res] = 1;
func[res] = val;
return res;
}

static void destroy(int i) {
value[i] = free;
free = i;
}

static void fix(int i) {
int l = left[i], r = right[i];
int sl = l < 0 ? 0 : size[l];
int sr = r < 0 ? 0 : size[r];
size[i] = 1 + sl + sr;
func[i] = value[i] – sl;
if (l >= 0) {
func[i] = min(func[i], func[l]);
}
if (r >= 0) {
func[i] = min(func[i], func[r] – sl – 1);
}
}

static int splitLeft, splitRight, splitSelf;
static void split(int root, int val) {
if (root < 0) {
splitLeft = splitRight = splitSelf = -1;
} else if (value[root] > val) {
split(left[root], val);
left[root] = splitRight;
splitRight = root;
fix(root);
} else if (value[root] < val) {
split(right[root], val);
right[root] = splitLeft;
splitLeft = root;
fix(root);
} else {
splitLeft = left[root];
splitRight = right[root];
splitSelf = root;
left[root] = right[root] = -1;
fix(root);
}
}

static void split2(int root, int v) {
if (root < 0) {
splitLeft = splitRight = -1;
} else {
int sl = left[root] < 0 ? 0 : size[left[root]];
if (value[root] + sl + v >= 0) {
split2(left[root], v);
left[root] = splitRight;
splitRight = root;
fix(root);
} else {
split2(right[root], v + sl + 1);
right[root] = splitLeft;
splitLeft = root;
fix(root);
}
}
}

static int merge(int l, int r) {
if (l < 0) {
return r;
} else if (r < 0) {
return l;
} else if (y[l] < y[r]) {
right[l] = merge(right[l], r);
fix(l);
return l;
} else {
left[r] = merge(l, left[r]);
fix(r);
return r;
}
}

// static void print(int root) {
// print2(root);
// System.err.println();
// }
//
// static void print2(int root) {
// if (root >= 0) {
// System.err.print(‘(‘);
// if (left[root] >= 0) {
// print2(left[root]);
// System.err.print(‘ ‘);
// }
// System.err.print(value[root]);
// if (right[root] >= 0) {
// System.err.print(‘ ‘);
// print2(right[root]);
// }
// System.err.print(‘)’);
// }
// }

static void solve() throws Exception {
int n = nextInt();
left = new int[n];
right = new int[n];
value = new int[n];
y = new int[n];
size = new int[n];
func = new int[n];
free = 0;
for (int i = 0; i < n; i++) {
y[i] = rng.nextInt();
value[i] = i < n – 1 ? i + 1 : -1;
}
int root = -1;
for (int i = 0; i < n; i++) {
int val = nextInt();
split(root, val);
root = merge(merge(merge(splitLeft, create(val)), splitSelf), splitRight);
// print(root);
split2(root, 0);
int sl = splitLeft < 0 ? 0 : size[splitLeft];
int sr = splitRight < 0 ? 0 : size[splitRight];
int fr = splitRight < 0 ? 2 * n : func[splitRight];
out.println(min(sr – sl, fr + sr – 1));
root = merge(splitLeft, splitRight);
// print(root);
}
}

static int nextInt() throws IOException {
return parseInt(next());
}

static long nextLong() throws IOException {
return parseLong(next());
}

static double nextDouble() throws IOException {
return parseDouble(next());
}

static String next() throws IOException {
while (tok == null || !tok.hasMoreTokens()) {
tok = new StringTokenizer(in.readLine());
}
return tok.nextToken();
}

public static void main(String[] args) {
try {
in = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(new OutputStreamWriter(System.out));
solve();
in.close();
out.close();
} catch (Throwable e) {
e.printStackTrace();
exit(1);
}
}
}

Xiaomi flags memory pressure,...

Xiaomi Reports Record 2025 Earnings Amid Embodied AI Push...

50 Genius Designs Students...

Revolutionizing the Campus: Innovative Designs That Are Changing Student...

Albury Hospital CEO to...

Bill Appleby Resigns: Albury Wodonga Health CEO Steps Down...

Dogs and cats seized...

Massive Animal Rescue in Lake Hughes Sparks Legal Battle...

Colorectal cancer is top...

The Rising Threat: Colorectal Cancer in Young Adults Recent health...

North Carolina’s economic dean...

North Carolina’s Economic Outlook: An Update from the State’s...

Xiaomi flags memory pressure, sees Apple user conversions, and pushes embodied AI strategy

Xiaomi Reports Record 2025 Earnings Amid Embodied AI Push and Memory Cost ChallengesXiaomi has officially shared its 2025 fiscal results, showcasing a year of...

50 Genius Designs Students Have Spotted At Schools And Universities

Revolutionizing the Campus: Innovative Designs That Are Changing Student LifeWhen we think of traditional educational environments, the images that typically come to mind are...

Albury Hospital CEO to step down amid staff concerns over safety

Bill Appleby Resigns: Albury Wodonga Health CEO Steps Down Amid Safety Concerns In a significant development for the regional healthcare sector, Bill Appleby, the Chief...

Dogs and cats seized in record-breaking animal rescue could be caged for months as accused hoarder claims innocence

Massive Animal Rescue in Lake Hughes Sparks Legal Battle Over Hundreds of Pets In what is being described as one of the largest animal rescue...

Colorectal cancer is top killer for young adults. A 5K helps raise awareness – St. Augustine Record

The Rising Threat: Colorectal Cancer in Young Adults Recent health data has revealed a startling and somber trend in the United States: colorectal cancer has...

North Carolina’s economic dean gives an update

North Carolina’s Economic Outlook: An Update from the State’s Economic Dean North Carolina remains at a pivotal crossroads as we navigate the complexities of the...

HSBC layoffs soon? Wall Street giant may slash 20,000 roles amid AI-led overhaul, says report

HSBC Reportedly Planning Massive Layoffs in AI-Driven RestructuringThe global banking landscape is on the verge of a significant transformation as HSBC, one of the...

The Dark Origins of the Treadmill and Why Oscar Wilde was the Worst

From Torture to Training: The Grim History of Your Favorite Gym EquipmentMost people today step onto a treadmill to improve their cardiovascular health, burn...

More Evidence Season 5 Of Bridgerton Will Be About Eloise (And Not Francesca)

Is Eloise Bridgerton the Next Lead? New Clues for Season 5With the official confirmation that Benedict Bridgerton will lead the fourth season of Netflix’s...