UVA - 12657 Boxes in a Line

/*题意:你有一行盒子,从左到右依次编号为1, 2, 3,…, n。你可以执行四种指令:

1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令)。
2 X Y表示把盒子X移动到盒子Y右边(如果X已经在Y的右边则忽略此指令)。
3 X Y表示交换盒子X和Y的位置。
4 表示反转整条链。

盒子个数n和指令条数m(1<=n,m<=100,000)*/




#include 
#include 
 using namespace std;

int r[100010];
int l[100010];

 void link(int x,int y)
 {
     l[y]=x;
     r[x]=y;
 }
 void moveleft(int x,int y)
 {
     link(l[x],r[x]);
     link(l[y],x);
     link(x,y);
 }
 void moveright(int x,int y)
 {
     link(l[x],r[x]);
     link(x,r[y]);
     link(y,x);
 }

 void exchange(int x,int y)
 {
     int ll,rl,lr,rr;
     ll=l[x];rl=r[x];lr=l[y];rr=r[y];
     if(ll==y)
     {
         link (lr,x);
         link (x,y);
         link (y,rl);
     }
     else if (x==lr)
     {
         link (ll,y);
         link (y,x);
         link (x,rr);
     }
     else
    {
        link (ll,y);
        link (y,rl);
        link (lr,x);
        link (x,rr);
    }
 }

 int main()
 {
     int i,m,n,j,k,t=0;
     long long sum;
     while(scanf("%d %d",&n,&m)!=EOF)
     {
         k=0;
         memset (r,0,sizeof(r));
         memset (l,0,sizeof(l));
         for (i=0;i<=n;i++)
            link (i,i+1);
         for(j=0;j


你可能感兴趣的:(数据结构基础,uva,UVA,-,12657,Boxes,in)