标签:des style http io color os ar java for
8 2 CUT 3 5 4 FLIP 2 6 -1 -1
1 4 3 7 6 2 5 8
代码:
/* ***********************************************
Author :rabbit
Created Time :2014/10/31 13:27:36
File Name :2.cpp
************************************************ */
#pragma comment(linker, "/STACK:102400000,102400000")
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <string>
#include <time.h>
#include <math.h>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pi acos(-1.0)
typedef long long ll;
const int maxn=300300;
struct Node;
Node *null;
struct Node{
Node *ch[2],*fa;
int size,rev,key;
Node(){
ch[0]=ch[1]=fa=null;
rev=0;
}
inline void push_up(){
if(this==null)return;
size=ch[0]->size+ch[1]->size+1;
}
inline void setc(Node *p,int d){
ch[d]=p;
p->fa=this;
}
inline bool d(){
return fa->ch[1]==this;
}
void clear(){
size=1;
ch[0]=ch[1]=fa=null;
rev=0;
}
void Update_Rev(){
if(this==null)return;
swap(ch[0],ch[1]);
rev^=1;
}
inline void push_down(){
if(this==null)return;
if(rev){
ch[0]->Update_Rev();
ch[1]->Update_Rev();
rev=0;
}
}
inline bool isroot(){
return fa==null||this!=fa->ch[0]&&this!=fa->ch[1];
}
};
inline void rotate(Node *x){
Node *f=x->fa,*ff=x->fa->fa;
f->push_down();
x->push_down();
int c=x->d(),cc=f->d();
f->setc(x->ch[!c],c);
x->setc(f,!c);
if(ff->ch[cc]==f)ff->setc(x,cc);
else x->fa=ff;
f->push_up();
}
inline void splay(Node *&root,Node *x,Node *goal){
while(x->fa!=goal){
if(x->fa->fa==goal)rotate(x);
else{
x->fa->fa->push_down();
x->fa->push_down();
x->push_down();
bool f=x->fa->d();
x->d()==f?rotate(x->fa):rotate(x);
rotate(x);
}
}
x->push_up();
if(goal==null)root=x;
}
Node *get_kth(Node *r,int k){
Node *x=r;
x->push_down();
while(x->ch[0]->size+1!=k){
if(k<x->ch[0]->size+1)x=x->ch[0];
else{
k-=x->ch[0]->size+1;
x=x->ch[1];
}
x->push_down();
}
return x;
}
Node pool[maxn],*tail,*node[maxn],*root;
void build(Node *&x,int l,int r,Node *fa){
if(l>r)return;
int mid=(l+r)/2;
x=tail++;
x->clear();
x->fa=fa;
x->key=mid;
node[mid]=x;
build(x->ch[0],l,mid-1,x);
build(x->ch[1],mid+1,r,x);
x->push_up();
}
void init(int n){
tail=pool;
null=tail++;
null->fa=null->ch[0]=null->ch[1]=null;
null->size=0;null->rev=0;null->key=0;
Node *p=tail++;
p->clear();p->key=-INF;
root=p;
p=tail++;
p->clear();p->key=INF;
root->setc(p,1);
build(root->ch[1]->ch[0],1,n,root->ch[1]);
root->ch[1]->push_up();
root->push_up();
}
void cut(int a,int b,int c){
splay(root,get_kth(root,a),null);
splay(root,get_kth(root,b+2),root);
Node *tmp=root->ch[1]->ch[0];
root->ch[1]->ch[0]=null;
root->ch[1]->push_up();
root->push_up();
splay(root,get_kth(root,c+1),null);
splay(root,get_kth(root,c+2),root);
root->ch[1]->ch[0]=tmp;
tmp->fa=root->ch[1];
root->ch[1]->push_up();
root->push_up();
}
void flip(int a,int b){
splay(root,get_kth(root,a),null);
splay(root,get_kth(root,b+2),root);
root->ch[1]->ch[0]->Update_Rev();
root->ch[1]->push_up();
root->push_up();
}
int ans[maxn],cnt;
void dfs(Node *root){
if(root==null)return;
root->push_down();
dfs(root->ch[0]);
ans[cnt++]=root->key;
dfs(root->ch[1]);
}
int main()
{
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
int n,m;
while(~scanf("%d%d",&n,&m)){
if(n==-1&&m==-1)break;
char op[20];
init(n);
while(m--){
scanf("%s",op);
if(op[0]=='C'){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
cut(a,b,c);
}
else {
int a,b;
scanf("%d%d",&a,&b);
flip(a,b);
}
}
cnt=0;
dfs(root);
for(int i=1;i<cnt-1;i++)printf("%d%c",ans[i],i==cnt-2?'\n':' ');
}
return 0;
}标签:des style http io color os ar java for
原文地址:http://blog.csdn.net/xianxingwuguan1/article/details/40681035