标签: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