标签:des style blog http io color os ar java
6 3 4 5 1 6 2 4 3 3 2 1 0
4 6 4 5 6 6 4 2 4 4
代码:
/* *********************************************** Author :rabbit Created Time :2014/10/30 20:47:45 File Name :1.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=100100; struct Node; Node *null; struct Node{ Node *ch[2],*fa; int size; int rev; 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(); } 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 *get_next(Node *p){ p->push_down(); p=p->ch[1]; p->push_down(); while(p->ch[0]!=null){ p=p->ch[0]; p->push_down(); } return p; } Node pool[maxn],*tail; Node *node[maxn],*root; void build(Node *&x,int l,int r,Node *fa){ if(l>r)return; int mid=(l+r)>>1; x=tail++; x->clear(); x->fa=fa; 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; Node *p=tail++; p->clear(); root=p; p=tail++; p->clear(); root->setc(p,1); build(root->ch[1]->ch[0],1,n,root->ch[1]); root->ch[1]->push_up(); root->push_up(); } int a[maxn],b[maxn]; bool cmp(int i,int j){ if(a[i]!=a[j])return a[i]<a[j]; return i<j; } int main() { //freopen("data.in","r",stdin); //freopen("data.out","w",stdout); int n; while(~scanf("%d",&n)&&n){ for(int i=1;i<=n;i++){ scanf("%d",&a[i]); b[i]=i; } init(n); sort(b+1,b+n+1,cmp); for(int i=1;i<=n;i++){ splay(root,node[b[i]],null); int sz=root->ch[0]->size; printf("%d",root->ch[0]->size); if(i==n)puts("");else printf(" "); splay(root,get_kth(root,i),null); splay(root,get_kth(root,sz+2),root); root->ch[1]->ch[0]->Update_Rev(); } } return 0; }
标签:des style blog http io color os ar java
原文地址:http://blog.csdn.net/xianxingwuguan1/article/details/40681055