#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#include <map>
using namespace std;
// S ID POS IDDR - split treap id at pos in id and iddr
// J IDST IDDR - join idst and iddr in idst
// Q ID PST PDR - find minimum of id's values form pst to pdr
ifstream F("trains.in");
ofstream G("trains.out");
const int infi = (1LL<<31)-1;
const int debuging = 0;
const int N = 16010;
struct treap
{
int value,min,priority,size;
treap *left,*right;
treap() {}
treap(int priority,int value,int min,int size,treap *left,treap *right)
{
this->priority = priority;
this->value = value;
this->min = min;
this->left = left;
this->right = right;
this->size = size;
}
};
treap* _null;
map<int,treap*> mp; // id->treap
treap *tree;
int n,m;
void init()
{
srand(time(0));
_null = new treap(0,infi,infi,0,NULL,NULL);
}
void update(treap *n)
{
n->size = n->left->size + n->right->size + 1;
n->min = min( n->left->min , n->right->min );
n->min = min( n->min,n->value );
}
void rleft(treap* &z) // l->r
{
treap* w = z->left;
z->left = w->right;
w->right = z;
z = w;
update(z->right);
update(z);
}
void rright(treap* &w) // r->l
{
treap* z = w->right;
w->right = z->left;
z->left = w;
w = z;
update(w->left);
update(w);
}
void balance(treap* &n)
{
if ( n->left->priority > n->priority )
rleft(n);
else
if ( n->right->priority > n->priority )
rright(n);
}
void insert(treap* &n,int pos,int priority,int value)
{
if ( n == _null )
{
n = new treap(priority,value,value,1,_null,_null);
return;
}
if ( pos <= n->left->size+1 )
insert(n->left,pos,priority,value);
else
insert(n->right,pos-(n->left->size+1),priority,value);
balance(n);
update(n);
}
treap *aux;
void erase(treap *&t,int pos)
{
if ( pos == t->left->size+1 )
{
if ( t->left == _null && t->right == _null )
{
aux = new treap(t->priority,t->value,infi,0,NULL,NULL);
delete t;
t = _null;
return;
}
else if ( t->left->priority > t->right->priority )
{
rleft(t);
erase(t->right,pos-(t->left->size)-1);
}
else
{
rright(t);
erase(t->left,pos);
}
} else
if ( t->left->size >= pos )
erase(t->left,pos);
else
erase(t->right,pos-(t->left->size)-1);
update(t);
}
void split(treap* &n,int pos,treap* &m)
{
erase(n,pos);
int pr = aux->priority , vl = aux->value;
insert(n,pos,infi,aux->value);
m = n->right;
n->right = _null;
erase(n,pos);
insert(n,pos,pr,vl);
aux = _null;
}
void join(treap *&n,treap *l,treap *r)
{
n = new treap(-infi,infi,infi,l->size+r->size,l,r);
erase(n,n->left->size+1);
}
int go(treap* &n,int pos,int l,int r)
{
int a = (n->left->size+1);
int v = infi;
if ( pos < a )
v = go(n->left,pos,l,r);
else if ( pos > a )
v = go(n->right,pos-a,l-a,r-a);
if ( l <= a && a <= r ) v = min(v,n->value);
if ( n->left != _null )
{
int start = 1;
int stop = n->left->size;
if ( l <= start && stop <= r )
v = min(v,n->left->min);
}
if ( n->right != _null )
{
int start = n->left->size+2;
int stop = n->size;
if ( l <= start && stop <= r )
v = min(v,n->right->min);
}
return v;
}
int query(treap* &n,int l,int r)
{
int mini = infi;
mini = min( mini , go(n,l,l,r) );
mini = min( mini , go(n,r,l,r) );
return mini;
}
void print(treap *n)
{
if ( n == _null ) return;
print(n->left);
cerr<<n->value<<' ';
//cerr<<n->priority<<' ';
print(n->right);
}
int main()
{
init();
tree = _null;
F>>n>>m;
for (int i=1,a;i<=n;++i)
{
F>>a;
insert(tree,i,rand()+1,a);
if ( debuging ) print(tree),cerr<<'\n';
}
mp[0] = tree;
for (int i=1;i<=m;++i)
{
char ch;
F>>ch;
if ( ch == 'S' )
{
int a,p,b;
F>>a>>p>>b;
treap* aux_tree = _null;
split(mp[a],p,aux_tree);
mp[b] = aux_tree;
if ( debuging )
{
cerr<<"split"<<'\n';
print(mp[a]); cerr<<'\n';
print(mp[b]); cerr<<'\n';
}
}
if ( ch == 'J' )
{
int a,b;
F>>a>>b;
join(mp[a],mp[a],mp[b]);
mp[b] = _null;
if ( debuging )
{
cerr<<"join"<<'\n';
print(mp[a]); cerr<<'\n';
}
}
if ( ch == 'Q' )
{
int a,l,r;
F>>a>>l>>r;
G<<query(mp[a],l,r)<<' ';
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPG1hcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIFMgSUQgUE9TIElERFIgLSBzcGxpdCB0cmVhcCBpZCBhdCBwb3MgaW4gaWQgYW5kIGlkZHIKLy8gSiBJRFNUIElERFIgLSBqb2luIGlkc3QgYW5kIGlkZHIgaW4gaWRzdAovLyBRIElEIFBTVCBQRFIgLSBmaW5kIG1pbmltdW0gb2YgaWQncyB2YWx1ZXMgZm9ybSBwc3QgdG8gcGRyCgppZnN0cmVhbSBGKCJ0cmFpbnMuaW4iKTsKb2ZzdHJlYW0gRygidHJhaW5zLm91dCIpOwoKY29uc3QgaW50IGluZmkgPSAoMUxMPDwzMSktMTsKY29uc3QgaW50IGRlYnVnaW5nID0gMDsKY29uc3QgaW50IE4gPSAxNjAxMDsKCnN0cnVjdCB0cmVhcAp7CiAgICBpbnQgdmFsdWUsbWluLHByaW9yaXR5LHNpemU7CiAgICB0cmVhcCAqbGVmdCwqcmlnaHQ7CiAgICB0cmVhcCgpIHt9CiAgICB0cmVhcChpbnQgcHJpb3JpdHksaW50IHZhbHVlLGludCBtaW4saW50IHNpemUsdHJlYXAgKmxlZnQsdHJlYXAgKnJpZ2h0KQogICAgewogICAgICAgIHRoaXMtPnByaW9yaXR5ID0gcHJpb3JpdHk7CiAgICAgICAgdGhpcy0+dmFsdWUgPSB2YWx1ZTsKICAgICAgICB0aGlzLT5taW4gPSBtaW47CiAgICAgICAgdGhpcy0+bGVmdCA9IGxlZnQ7CiAgICAgICAgdGhpcy0+cmlnaHQgPSByaWdodDsKICAgICAgICB0aGlzLT5zaXplID0gc2l6ZTsKICAgIH0KfTsKCnRyZWFwKiBfbnVsbDsKbWFwPGludCx0cmVhcCo+IG1wOyAvLyBpZC0+dHJlYXAKCnRyZWFwICp0cmVlOwppbnQgbixtOwoKdm9pZCBpbml0KCkKewogICAgc3JhbmQodGltZSgwKSk7CiAgICBfbnVsbCA9IG5ldyB0cmVhcCgwLGluZmksaW5maSwwLE5VTEwsTlVMTCk7Cn0KCnZvaWQgdXBkYXRlKHRyZWFwICpuKQp7CiAgICBuLT5zaXplID0gbi0+bGVmdC0+c2l6ZSArIG4tPnJpZ2h0LT5zaXplICsgMTsKICAgIG4tPm1pbiA9IG1pbiggbi0+bGVmdC0+bWluICwgbi0+cmlnaHQtPm1pbiApOwogICAgbi0+bWluID0gbWluKCBuLT5taW4sbi0+dmFsdWUgKTsKfQoKdm9pZCBybGVmdCh0cmVhcCogJnopIC8vIGwtPnIKewogICAgdHJlYXAqIHcgPSB6LT5sZWZ0OwogICAgei0+bGVmdCA9IHctPnJpZ2h0OwogICAgdy0+cmlnaHQgPSB6OwogICAgeiA9IHc7CgogICAgdXBkYXRlKHotPnJpZ2h0KTsKICAgIHVwZGF0ZSh6KTsKfQoKdm9pZCBycmlnaHQodHJlYXAqICZ3KSAvLyByLT5sCnsKICAgIHRyZWFwKiB6ID0gdy0+cmlnaHQ7CiAgICB3LT5yaWdodCA9IHotPmxlZnQ7CiAgICB6LT5sZWZ0ID0gdzsKICAgIHcgPSB6OwoKICAgIHVwZGF0ZSh3LT5sZWZ0KTsKICAgIHVwZGF0ZSh3KTsKfQoKdm9pZCBiYWxhbmNlKHRyZWFwKiAmbikKewogICAgaWYgKCBuLT5sZWZ0LT5wcmlvcml0eSA+IG4tPnByaW9yaXR5ICkKICAgICAgICBybGVmdChuKTsKICAgIGVsc2UKICAgICAgICBpZiAoIG4tPnJpZ2h0LT5wcmlvcml0eSA+IG4tPnByaW9yaXR5ICkKICAgICAgICAgICAgcnJpZ2h0KG4pOwp9Cgp2b2lkIGluc2VydCh0cmVhcCogJm4saW50IHBvcyxpbnQgcHJpb3JpdHksaW50IHZhbHVlKQp7CiAgICBpZiAoIG4gPT0gX251bGwgKQogICAgewogICAgICAgIG4gPSBuZXcgdHJlYXAocHJpb3JpdHksdmFsdWUsdmFsdWUsMSxfbnVsbCxfbnVsbCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCBwb3MgPD0gbi0+bGVmdC0+c2l6ZSsxICkKICAgICAgICBpbnNlcnQobi0+bGVmdCxwb3MscHJpb3JpdHksdmFsdWUpOwogICAgZWxzZQogICAgICAgIGluc2VydChuLT5yaWdodCxwb3MtKG4tPmxlZnQtPnNpemUrMSkscHJpb3JpdHksdmFsdWUpOwogICAgYmFsYW5jZShuKTsKICAgIHVwZGF0ZShuKTsKfQoKdHJlYXAgKmF1eDsKCnZvaWQgZXJhc2UodHJlYXAgKiZ0LGludCBwb3MpCnsKICAgIGlmICggcG9zID09IHQtPmxlZnQtPnNpemUrMSAgKQogICAgewogICAgICAgIGlmICggdC0+bGVmdCA9PSBfbnVsbCAmJiB0LT5yaWdodCA9PSBfbnVsbCApCiAgICAgICAgewogICAgICAgICAgICBhdXggPSBuZXcgdHJlYXAodC0+cHJpb3JpdHksdC0+dmFsdWUsaW5maSwwLE5VTEwsTlVMTCk7CiAgICAgICAgICAgIGRlbGV0ZSB0OwogICAgICAgICAgICB0ID0gX251bGw7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoIHQtPmxlZnQtPnByaW9yaXR5ID4gdC0+cmlnaHQtPnByaW9yaXR5ICkKICAgICAgICB7CiAgICAgICAgICAgIHJsZWZ0KHQpOwogICAgICAgICAgICBlcmFzZSh0LT5yaWdodCxwb3MtKHQtPmxlZnQtPnNpemUpLTEpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBycmlnaHQodCk7CiAgICAgICAgICAgIGVyYXNlKHQtPmxlZnQscG9zKTsKICAgICAgICB9CiAgICB9IGVsc2UKICAgIGlmICggdC0+bGVmdC0+c2l6ZSA+PSBwb3MgKQogICAgICAgIGVyYXNlKHQtPmxlZnQscG9zKTsKICAgIGVsc2UKICAgICAgICBlcmFzZSh0LT5yaWdodCxwb3MtKHQtPmxlZnQtPnNpemUpLTEpOwoKICAgIHVwZGF0ZSh0KTsKfQoKdm9pZCBzcGxpdCh0cmVhcCogJm4saW50IHBvcyx0cmVhcCogJm0pCnsKICAgIGVyYXNlKG4scG9zKTsKICAgIGludCBwciA9IGF1eC0+cHJpb3JpdHkgLCB2bCA9IGF1eC0+dmFsdWU7CiAgICBpbnNlcnQobixwb3MsaW5maSxhdXgtPnZhbHVlKTsKICAgIG0gPSBuLT5yaWdodDsKICAgIG4tPnJpZ2h0ID0gX251bGw7CiAgICBlcmFzZShuLHBvcyk7CiAgICBpbnNlcnQobixwb3MscHIsdmwpOwogICAgYXV4ID0gX251bGw7Cn0KCnZvaWQgam9pbih0cmVhcCAqJm4sdHJlYXAgKmwsdHJlYXAgKnIpCnsKICAgIG4gPSBuZXcgdHJlYXAoLWluZmksaW5maSxpbmZpLGwtPnNpemUrci0+c2l6ZSxsLHIpOwogICAgZXJhc2UobixuLT5sZWZ0LT5zaXplKzEpOwp9CgppbnQgZ28odHJlYXAqICZuLGludCBwb3MsaW50IGwsaW50IHIpCnsKICAgIGludCBhID0gKG4tPmxlZnQtPnNpemUrMSk7CiAgICBpbnQgdiA9IGluZmk7CgogICAgaWYgKCBwb3MgPCBhICkKICAgICAgICB2ID0gZ28obi0+bGVmdCxwb3MsbCxyKTsKICAgIGVsc2UgaWYgKCBwb3MgPiBhICkKICAgICAgICB2ID0gZ28obi0+cmlnaHQscG9zLWEsbC1hLHItYSk7CgogICAgaWYgKCBsIDw9IGEgJiYgYSA8PSByICkgdiA9IG1pbih2LG4tPnZhbHVlKTsKCiAgICBpZiAoIG4tPmxlZnQgIT0gX251bGwgKQogICAgewogICAgICAgIGludCBzdGFydCA9IDE7CiAgICAgICAgaW50IHN0b3AgPSBuLT5sZWZ0LT5zaXplOwogICAgICAgIGlmICggbCA8PSBzdGFydCAmJiBzdG9wIDw9IHIgKQogICAgICAgICAgICB2ID0gbWluKHYsbi0+bGVmdC0+bWluKTsKICAgIH0KICAgIGlmICggbi0+cmlnaHQgIT0gX251bGwgKQogICAgewogICAgICAgIGludCBzdGFydCA9IG4tPmxlZnQtPnNpemUrMjsKICAgICAgICBpbnQgc3RvcCA9IG4tPnNpemU7CiAgICAgICAgaWYgKCBsIDw9IHN0YXJ0ICYmIHN0b3AgPD0gciApCiAgICAgICAgICAgIHYgPSBtaW4odixuLT5yaWdodC0+bWluKTsKICAgIH0KCiAgICByZXR1cm4gdjsKfQoKaW50IHF1ZXJ5KHRyZWFwKiAmbixpbnQgbCxpbnQgcikKewogICAgaW50IG1pbmkgPSBpbmZpOwogICAgbWluaSA9IG1pbiggbWluaSAsIGdvKG4sbCxsLHIpICk7CiAgICBtaW5pID0gbWluKCBtaW5pICwgZ28obixyLGwscikgKTsKICAgIHJldHVybiBtaW5pOwp9Cgp2b2lkIHByaW50KHRyZWFwICpuKQp7CiAgICBpZiAoIG4gPT0gX251bGwgKSByZXR1cm47CiAgICBwcmludChuLT5sZWZ0KTsKICAgIGNlcnI8PG4tPnZhbHVlPDwnICc7CiAgICAvL2NlcnI8PG4tPnByaW9yaXR5PDwnICc7CiAgICBwcmludChuLT5yaWdodCk7Cn0KCmludCBtYWluKCkKewogICAgaW5pdCgpOwogICAgdHJlZSA9IF9udWxsOwogICAgRj4+bj4+bTsKICAgIGZvciAoaW50IGk9MSxhO2k8PW47KytpKQogICAgewogICAgICAgIEY+PmE7CiAgICAgICAgaW5zZXJ0KHRyZWUsaSxyYW5kKCkrMSxhKTsKICAgICAgICBpZiAoIGRlYnVnaW5nICkgcHJpbnQodHJlZSksY2Vycjw8J1xuJzsKICAgIH0KICAgIG1wWzBdID0gdHJlZTsKICAgIGZvciAoaW50IGk9MTtpPD1tOysraSkKICAgIHsKICAgICAgICBjaGFyIGNoOwogICAgICAgIEY+PmNoOwogICAgICAgIGlmICggY2ggPT0gJ1MnICkKICAgICAgICB7CiAgICAgICAgICAgIGludCBhLHAsYjsKICAgICAgICAgICAgRj4+YT4+cD4+YjsKICAgICAgICAgICAgdHJlYXAqIGF1eF90cmVlID0gX251bGw7CiAgICAgICAgICAgIHNwbGl0KG1wW2FdLHAsYXV4X3RyZWUpOwogICAgICAgICAgICBtcFtiXSA9IGF1eF90cmVlOwogICAgICAgICAgICBpZiAoIGRlYnVnaW5nICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2Vycjw8InNwbGl0Ijw8J1xuJzsKICAgICAgICAgICAgICAgIHByaW50KG1wW2FdKTsgY2Vycjw8J1xuJzsKICAgICAgICAgICAgICAgIHByaW50KG1wW2JdKTsgY2Vycjw8J1xuJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIGNoID09ICdKJyApCiAgICAgICAgewogICAgICAgICAgICBpbnQgYSxiOwogICAgICAgICAgICBGPj5hPj5iOwogICAgICAgICAgICBqb2luKG1wW2FdLG1wW2FdLG1wW2JdKTsKICAgICAgICAgICAgbXBbYl0gPSBfbnVsbDsKICAgICAgICAgICAgaWYgKCBkZWJ1Z2luZyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNlcnI8PCJqb2luIjw8J1xuJzsKICAgICAgICAgICAgICAgIHByaW50KG1wW2FdKTsgY2Vycjw8J1xuJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIGNoID09ICdRJyApCiAgICAgICAgewogICAgICAgICAgICBpbnQgYSxsLHI7CiAgICAgICAgICAgIEY+PmE+Pmw+PnI7CiAgICAgICAgICAgIEc8PHF1ZXJ5KG1wW2FdLGwscik8PCcgJzsKICAgICAgICB9CiAgICB9Cn0K