其他的测试点是tle,跑了一遍发现死循环了?为什么死循环?
#include<bits/stdc++.h>
using namespace std;
const int N=5*1e5+2;
int t,n;
int a[2*N];
int another[2*N];
char ans[2*N];
int vis[2*N];
int idx;
int f;
int x1,x2;
void search(int l,int r){
if(idx==n){f=1;return;}
if(f==1)return;
if(l>=r)return;
if(x1<=0 || x2>2*n)return;
if((another[l]==x1 || another[l]==x2)&&l<=x1){
ans[++idx]='L';
//cerr<<idx<<"->"<<"L"<<endl;
if(another[l]==x1){
ans[2*n-idx+1]='L';
x1--;
search(l+1,r);
x1++;
}
else if(another[l]==x2){
ans[2*n-idx+1]='R';
x2++;
search(l+1,r);
x2--;
}
idx--;
}if(f==1)return;
if((another[r]==x1 || another[r]==x2)&&r>=x2){
ans[++idx]='R';
//cerr<<idx<<"->"<<"R"<<endl;
if(another[r]==x1){
ans[2*n-idx+1]='L';
x1--;
search(l,r-1);
x1++;
}
else if(another[r]==x2){
ans[2*n-idx+1]='R';
x2++;
search(l,r-1);
x2--;
}
idx--;
}
}void print(){
for(int i=1;i<=2*n;i++)cout<<ans[i];
cout<<endl;
}
int main(){
//freopen("P7915_11.in","r",stdin);
//freopen("answer.out","w",stdout);
cin>>t;
while(t--){
idx=0;
f=0;
memset(vis,0,sizeof vis);
memset(another,0,sizeof another);
memset(ans,0,sizeof ans);
cin>>n;
for(int i=1;i<=n*2;i++){
cin>>a[i];
if(!vis[a[i]]){
vis[a[i]]=i;
}else{
another[vis[a[i]]]=i;
another[i]=vis[a[i]];
}
}
ans[++idx]='L';
ans[2*n-idx+1]='L';
x1=another[1]-1;x2=another[1]+1;
search(2,2*n);
if(f==1){print();continue;}
memset(ans,0,sizeof ans);
idx=0;
ans[++idx]='R';
ans[2*n-idx+1]='L';
x1=another[2*n]-1;x2=another[2*n]+1;
search(1,2*n-1);
if(f==0)cout<<-1<<endl;
else print();
}
return 0;
}