Pagini recente » Cod sursa (job #1035447) | Cod sursa (job #611468) | Cod sursa (job #2014423) | Cod sursa (job #2284865) | Cod sursa (job #3210614)
#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
#include <ext/rope>
using __gnu_cxx::rope;
const int kLog = 10;
const int kBuf = 1 << 18;
FILE *fin, *fout;
const int p10[kLog + 1] = {0, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
int rpos; char rbuf[kBuf];
int wpos; char wbuf[kBuf];
static inline int isspace(char ch) {
return ch == ' ';
}
static inline void initRead() {
rpos = kBuf - 1;
}
static inline char readChar() {
if(!(rpos = (rpos + 1) & (kBuf - 1))) {
fread(rbuf, 1, kBuf, fin);
}
return rbuf[rpos];
}
int readInt() {
int ch, res = 0;
while(isspace(ch = readChar()));
do {
res = 10 * res + ch - '0';
} while(isdigit(ch = readChar()));
return res;
}
static inline void initWrite() {
wpos = 0;
}
static inline void writeChar( char ch ) {
wbuf[wpos] = ch;
if(!(wpos = (wpos + 1) & (kBuf - 1))) {
fwrite(wbuf, 1, kBuf, fout);
}
}
void writeInt(int x) {
int i = kLog, d;
while(p10[i] > x) {
i--;
}
if(i == 0) {
writeChar('0');
} else {
do {
d = '0';
while (p10[i] <= x) {
x -= p10[i];
d++;
}
writeChar(d);
} while(--i > 0);
}
}
static inline void flushBuf() {
fwrite( wbuf, 1, wpos, fout );
}
int main() {
fin = fopen("secv8.in", "r"); initRead();
fout = fopen("secv8.out", "w"); initWrite();
rope<int> s, mirror;
int q = readInt();
readInt();
while(q--) {
char task = readChar();
if(task == 'I') {
int k = readInt(), e = readInt();
k--;
mirror.insert(s.size() - k, e);
s.insert(k, e);
} else if(task == 'A') {
int k = readInt();
k--;
writeInt(s[k]);
writeChar('\n');
} else if(task == 'R') {
int l = readInt(), r = readInt();
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 = readInt(), r = readInt();
l--; r--;
mirror.erase(s.size() - r - 1, r - l + 1);
s.erase(l, r - l + 1);
}
}
for(const auto &it: s) {
writeInt(it);
writeChar(' ');
}
flushBuf();
fclose(fin);
fclose(fout);
return 0;
}