10266 2024. 03. 29 20:55:10 szil Génsebész cpp17 Futási hiba 60/100 263ms 20732 KiB
#include <bits/stdc++.h>
#include "grader.h"

using namespace std;
using ll = long long;

struct Node {
	Node *l, *r;

	int cnt[26], prior, siz;
	char c;

	Node(char x) {
		c = x;
		fill(cnt, cnt+26, 0);
		cnt[x-'A']++;
		prior = rand();
		siz = 1;
		l = r = nullptr;
	}
};

int get_size(Node *ptr) {
	return ptr ? ptr->siz : 0;
}

void pull(Node *v) {
	v->siz = 1 + get_size(v->l) + get_size(v->r);
	for (int i = 0; i < 26; i++) {
		v->cnt[i] = (v->c-'A' == i);
		if (v->l) v->cnt[i] += v->l->cnt[i];
		if (v->r) v->cnt[i] += v->r->cnt[i];
	}
}

Node *merge(Node *l, Node *r) {
	if (!l || !r) return l ? l : r;
	if (l->prior > r->prior) {
		l->r = merge(l->r, r);
		pull(l);
		return l;
	} else {
		r->l = merge(l, r->l);
		pull(r);
		return r;
	}
}

pair<Node *, Node *> split(Node *v, int x) {
	if (!v) return {nullptr, nullptr};
	if (get_size(v->l) < x) {
		auto [l, r] = split(v->r, x - 1 - get_size(v->l));
		v->r = l;
		pull(v);
		return {v, r};
	} else {
		auto [l, r] = split(v->l, x);
		v->l = r;
		pull(v);
		return {l, v};
	}
}

void print(Node *v, string &res) {
	if (v->l) print(v->l, res);
	res += v->c;
	if (v->r) print(v->r, res);
}

Node *root = nullptr;

void Kezd(string s) {
	for (char c : s) {
		root = merge(root, new Node(c));
	}
}

void Beszur(int i, char x) {
	auto [a, b] = split(root, i);
	root = merge(a, merge(new Node(x), b));
}

void Mutal(int i, char x) {
	auto [a, b] = split(root, i-1);
	auto [c, d] = split(b, 1);
	root = merge(a, merge(new Node(x), d));
}

void Kivag(int i, int j) {
	auto [a, b] = split(root, i-1);
	auto [c, d] = split(b, j-i+1);
	root = merge(a, d);
}

int Szamlal(int i, int j, char x) {
	auto [a, b] = split(root, i-1);
	auto [c, d] = split(b, j-i+1);
	int res = c->cnt[x-'A'];
	root = merge(a, merge(c, d));
	return res;
}

string Eredmeny() {
	string res;
	print(root, res);
	return res;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1816 KiB
2 Futási hiba 3ms 2420 KiB
subtask2 30/30
3 Elfogadva 3ms 2384 KiB
4 Elfogadva 4ms 2612 KiB
5 Elfogadva 4ms 2936 KiB
6 Elfogadva 4ms 2720 KiB
7 Elfogadva 8ms 3088 KiB
8 Elfogadva 141ms 11976 KiB
subtask3 30/30
9 Elfogadva 3ms 3752 KiB
10 Elfogadva 4ms 3780 KiB
11 Elfogadva 4ms 4004 KiB
12 Elfogadva 4ms 4120 KiB
13 Elfogadva 8ms 4500 KiB
14 Elfogadva 195ms 16444 KiB
subtask4 0/20
15 Elfogadva 3ms 4996 KiB
16 Futási hiba 3ms 5236 KiB
17 Elfogadva 3ms 5256 KiB
18 Elfogadva 3ms 5524 KiB
19 Időlimit túllépés 247ms 20732 KiB
subtask5 0/20
20 Futási hiba 4ms 7316 KiB
21 Futási hiba 6ms 7636 KiB
22 Futási hiba 6ms 7992 KiB
23 Futási hiba 10ms 9460 KiB
24 Időlimit túllépés 263ms 20680 KiB