C++移动的小球_算法

//Author:PanDaoxi
#include <iostream>
using namespace std;
const int N=500001; 
int n,a[N];
int find(int x){
	for(int i=1;i<=n;i++){
		if(a[i]==x) return i;
	}
	return 0;
} 
void left(int x,int y){
	int t=a[x-1];
	for(int i=x;i<=y;i++){
		a[i-1]=a[i];
	}
	a[y]=t;
}
void right(int x,int y){
	int t=a[x];
	for(int i=x;i>=y;i--){
		a[i+1]=a[i];
	}
	a[y]=t;
}
int main(){
	int m,x,y,p,q;
	char type;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		a[i]=i;
	}
	for(int i=1;i<=m;i++){
		cin>>type>>x>>y;
		p=find(x);
		q=find(y);
		if(type=='A'){
			if(q>p) left(p+1,q-1);
			else right(p-1,q);
		}
		else{
			if(q>p) left(p+1,q);
			else right(p-1,q+1);
		}
	}
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	return 0;
}