Pagini recente » Cod sursa (job #25893) | Cod sursa (job #279775) | Cod sursa (job #2587754) | Cod sursa (job #1758901) | Cod sursa (job #3151713)
#include <bits/stdc++.h>
#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
///#include <tryhardmode>
///#include <GODMODE::ON>
using namespace std;
ifstream fin("secv8.in");
ofstream fout("secv8.out");
mt19937 rnd(time(0));
class treap{
public:
treap *left;
treap *right;
int key;
int priority;
int saiz;
bool lazy;
};
treap* root;
void propag(treap* &node)
{
if(node==NULL)
return ;
if(node->lazy)
{
if(node->left!=NULL)
node->left->lazy^=1;
if(node->right!=NULL)
node->right->lazy^=1;
swap(node->left,node->right);
node->lazy=false;
}
}
void split(treap *node,treap* &left,treap* &right,int poz)
{
if(node==NULL)
{
left=NULL;
right=NULL;
return ;
}
else
{
propag(node);
if(((node->left!=NULL)?(node->left->saiz):0)<poz)
{
split(node->right,node->right,right,poz-((node->left!=NULL)?(node->left->saiz):0)-1);
left=node;
}
else
{
split(node->left,left,node->left,poz);
right=node;
}
if(node!=NULL)
{
node->saiz=((node->left!=NULL)?(node->left->saiz):0)+((node->right!=NULL)?(node->right->saiz):0);
node->saiz++;
}
}
}
treap *merge_all(treap *left,treap *right)
{
propag(left);
propag(right);
if(left==NULL)
return right;
if(right==NULL)
return left;
if(left->priority>right->priority)
{
left->right=merge_all(left->right,right);
if(left!=NULL)
{
left->saiz=((left->left!=NULL)?(left->left->saiz):0)+((left->right!=NULL)?(left->right->saiz):0);
left->saiz++;
}
return left;
}
else
{
right->left=merge_all(left,right->left);
if(right!=NULL)
{
right->saiz=((right->left!=NULL)?(right->left->saiz):0)+((right->right!=NULL)?(right->right->saiz):0);
right->saiz++;
}
return right;
}
}
int search_value(treap* node,int x)
{
propag(node);
if(((node->left!=NULL)?(node->left->saiz):0)==x-1)
return node->key;
else if(((node->left!=NULL)?(node->left->saiz):0)>x-1)
return search_value(node->left,x);
else
return search_value(node->right,x-((node->left!=NULL)?(node->left->saiz):0)-1);
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
int n,q,i,j,x,y;
fin>>n>>q;
for(i=1;i<=n;i++)
{
string s;
fin>>s;
if(s=="I")
{
fin>>x>>y;
treap *left;
treap *right;
split(root,left,right,x-1);
treap *aux=new treap;
aux->key=y;
aux->lazy=false;
aux->saiz=1;
aux->left=NULL;
aux->right=NULL;
aux->priority=rnd();
root=merge_all(left,merge_all(aux,right));
}
else if(s=="A")
{
fin>>x;
fout<<search_value(root,x)<<"\n";
}
else if(s=="R")
{
fin>>x>>y;
treap *left;
treap *right;
treap *mij;
split(root,left,right,y);
split(left,left,mij,x-1);
if(mij!=NULL)
mij->lazy^=1;
root=merge_all(left,merge_all(mij,right));
}
else
{
fin>>x>>y;
treap *left;
treap *right;
treap *mij;
split(root,left,right,y);
split(left,left,mij,x-1);
root=merge_all(left,right);
}
}
int memo=root->saiz;
for(i=1;i<=memo;i++)
fout<<search_value(root,i)<<" ";
fin.close();
fout.close();
return 0;
}