Submission #1271568

#TimeUsernameProblemLanguageResultExecution timeMemory
1271568MateiKing80A Light Inconvenience (CEOI23_light)C++20
100 / 100
209 ms440 KiB
#include "light.h"
#include <bits/stdc++.h>

using namespace std;

using ll = long long;
#define int ll

vector<int> active;
int n;

void prepare() {
	active.push_back(1);
	n = 1;
}

void recalc(int p) {
	int pos = n;
	vector<int> nactive;
	while (pos > 0) {
		int ps = -1;
		for (int pas = 1 << 20; pas; pas >>= 1)
			if (ps + pas < (int)active.size() && active[ps + pas] < pos)
				ps += pas;
		if (active[ps] + p >= pos) {
			nactive.push_back(pos);
		} else {
			nactive.push_back(pos = active[ps + 1]);
		}
		pos = max(2 * pos - n - 2, 0ll);
	}
	if (nactive.back() != 1)
		nactive.push_back(1);
	reverse(nactive.begin(), nactive.end());
	active = nactive;
}

pair<int, vector<int>> join(int p) {
	n += p;
	recalc(p);
	return {p, active};
}

pair<int, vector<int>> leave(int p) {
	n -= p;
	recalc(p);
	return {p, active};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...