Cod sursa(job #2984233)

Utilizator andrei_C1Andrei Chertes andrei_C1 Data 23 februarie 2023 19:11:37
Problema Secv8 Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
// mirror trick
#include <bits/stdc++.h>
#include <ext/rope>

using namespace std;
using namespace __gnu_cxx;

ifstream fin("secv8.in");
ofstream fout("secv8.out");

int Q, r;
rope<int> s, mirror;

int main() {
	ios_base :: sync_with_stdio(false);
	fin >> Q >> r;

	for(int i = 0; i < Q; i++) {
		char task;
		fin >> task;

		if(task == 'I') {
			int k, e;
			fin >> k >> e;
			k--;

			mirror.insert(s.size() - k, e);
			s.insert(k, e);
		} else if(task == 'A') {
			int k;
			fin >> k;
			k--;

			fout << s[k] << '\n';
		} else if(task == 'R') {
			int l, r;
			fin >> l >> r;
			l--; r--;
			rope<int> subs = s.substr(l, r - l + 1);
			s.replace(l, r - l + 1, mirror.substr(s.size() - r - 1, r - l + 1));
			mirror.replace(s.size() - r - 1, r - l + 1, subs);
		} else {
			int l, r;
			fin >> l >> r;
			l--; r--;
			mirror.erase(s.size() - l, r - l + 1);
			s.erase(l, r - l + 1);
		}
	}

	for(const auto &it: s) {
		fout << it << " ";
	}
	return 0;
}