Submission #669127

# Submission time Handle Problem Language Result Execution time Memory
669127 2022-12-05T19:43:47 Z thiago_bastos Crayfish scrivener (IOI12_scrivener) C++17
100 / 100
425 ms 157736 KB
#include <bits/stdc++.h>

using namespace std;

const int N = 24 * 1e6, M = 1e6;

int nr = 1, roots[M+10], len[M+10], le[N], ri[N], cur;
char letter[N];

int build(int l, int r) {
	int p = cur++;
	if(l != r) {
		int m = (l + r) / 2;
		le[p] = build(l, m);
		ri[p] = build(m + 1, r);
	}
	return p;
}

int upd(int k, char c, int l, int r, int p) {
	int np = cur++;
	le[np] = le[p], ri[np] = ri[p];
	if(l == r) letter[np] = c;
	else {
		int m = (l + r) / 2;
		if(k <= m) le[np] = upd(k, c, l, m, le[p]);
		else ri[np] = upd(k, c, m + 1, r, ri[p]);
	}
	return np;
}

char query(int k, int l, int r, int p) {
	if(l == r) return letter[p];
	int m = (l + r) / 2;
	return k <= m ? query(k, l, m, le[p]) : query(k, m + 1, r, ri[p]);
}

void Init() {
	roots[0] = build(0, M - 1);
}

void TypeLetter(char L) {
	len[nr] = 1 + len[nr - 1];
	roots[nr] = upd(len[nr - 1], L, 0, M - 1, roots[nr - 1]);
	++nr;
}

void UndoCommands(int U) {
	len[nr] = len[nr - U - 1];
	roots[nr] = roots[nr - U - 1];
	++nr;
}

char GetLetter(int P) {
	return query(P, 0, M - 1, roots[nr - 1]); 
}
# Verdict Execution time Memory Grader output
1 Correct 15 ms 15956 KB Output is correct
2 Correct 14 ms 15892 KB Output is correct
3 Correct 15 ms 15956 KB Output is correct
4 Correct 14 ms 15956 KB Output is correct
5 Correct 15 ms 15948 KB Output is correct
6 Correct 14 ms 15980 KB Output is correct
7 Correct 15 ms 15984 KB Output is correct
8 Correct 14 ms 15956 KB Output is correct
9 Correct 18 ms 15992 KB Output is correct
10 Correct 16 ms 15920 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 17 ms 15888 KB Output is correct
2 Correct 16 ms 16000 KB Output is correct
3 Correct 15 ms 15948 KB Output is correct
4 Correct 15 ms 15948 KB Output is correct
5 Correct 15 ms 15976 KB Output is correct
6 Correct 14 ms 15924 KB Output is correct
7 Correct 15 ms 15984 KB Output is correct
8 Correct 14 ms 15956 KB Output is correct
9 Correct 14 ms 15880 KB Output is correct
10 Correct 17 ms 15996 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 16 ms 16212 KB Output is correct
2 Correct 17 ms 16308 KB Output is correct
3 Correct 16 ms 16292 KB Output is correct
4 Correct 16 ms 16620 KB Output is correct
5 Correct 16 ms 16280 KB Output is correct
6 Correct 17 ms 16724 KB Output is correct
7 Correct 16 ms 16712 KB Output is correct
8 Correct 16 ms 16468 KB Output is correct
9 Correct 16 ms 16536 KB Output is correct
10 Correct 17 ms 16264 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 329 ms 132156 KB Output is correct
2 Correct 283 ms 144376 KB Output is correct
3 Correct 346 ms 142476 KB Output is correct
4 Correct 303 ms 118892 KB Output is correct
5 Correct 388 ms 126344 KB Output is correct
6 Correct 311 ms 155052 KB Output is correct
7 Correct 376 ms 86336 KB Output is correct
8 Correct 323 ms 119928 KB Output is correct
9 Correct 371 ms 157736 KB Output is correct
10 Correct 235 ms 120760 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 377 ms 116172 KB Output is correct
2 Correct 401 ms 104940 KB Output is correct
3 Correct 337 ms 113996 KB Output is correct
4 Correct 337 ms 90720 KB Output is correct
5 Correct 317 ms 122676 KB Output is correct
6 Correct 311 ms 116364 KB Output is correct
7 Correct 335 ms 122976 KB Output is correct
8 Correct 358 ms 69280 KB Output is correct
9 Correct 425 ms 107900 KB Output is correct
10 Correct 237 ms 119888 KB Output is correct