10265 2024. 03. 29 20:47:46 szil Génsebész cpp17 Hibás válasz 0/100 97ms 31932 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 Hibás válasz 3ms 1812 KiB
2 Hibás válasz 3ms 2328 KiB
subtask2 0/30
3 Hibás válasz 3ms 2260 KiB
4 Hibás válasz 3ms 2360 KiB
5 Hibás válasz 3ms 2624 KiB
6 Hibás válasz 3ms 2604 KiB
7 Hibás válasz 3ms 2796 KiB
8 Hibás válasz 25ms 11292 KiB
subtask3 0/30
9 Hibás válasz 3ms 3044 KiB
10 Hibás válasz 3ms 3020 KiB
11 Hibás válasz 3ms 3204 KiB
12 Hibás válasz 3ms 3176 KiB
13 Hibás válasz 3ms 3420 KiB
14 Hibás válasz 34ms 14440 KiB
subtask4 0/20
15 Hibás válasz 3ms 3132 KiB
16 Hibás válasz 3ms 3364 KiB
17 Hibás válasz 3ms 3388 KiB
18 Hibás válasz 3ms 3340 KiB
19 Hibás válasz 43ms 17436 KiB
subtask5 0/20
20 Hibás válasz 4ms 4096 KiB
21 Hibás válasz 4ms 4356 KiB
22 Hibás válasz 6ms 4616 KiB
23 Hibás válasz 8ms 6232 KiB
24 Hibás válasz 97ms 31932 KiB