复杂度 O(n) 但是感觉细节出了问题于是挂了。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
typedef long long ll;
inline int read()
{
int x=0;
char c=getchar();
while(c<'0'||c>'9')
c=getchar();
while(c>='0'&&c<='9')
x=x*10+(c-'0'),c=getchar();
return x;
}
int a[maxn];
char ans[maxn];
int n;
inline int check(int a,int b)
{
return (1<=a&&a<=2*n)&&(1<=b&&b<=2*n);
}
int main()
{
int t=read();
while(t--)
{
memset(a,0,sizeof(a));
memset(ans,'\0',sizeof(ans));
n=read();
for(int i=1;i<=2*n;i++)
a[i]=read();
int xl=1,xr=2*n,ql=1,qr=1,cnt=1,flag=0;
while(a[++ql]!=a[1]);
xl++;if(ql==2)xl++;if(ql==2*n)xr--;
qr=ql+1;ql--;
ans[cnt]='L',ans[2*n-cnt+1]='L';cnt++;
while(cnt<=n)
{
if(a[xl]==a[ql]&&xl<=ql&&check(xl,ql))
{
ans[cnt]='L',ans[2*n-cnt+1]='L',cnt++;
xl++,ql--;
}
else if(a[xl]==a[qr]&&xl!=qr&&check(xl,qr))
{
ans[cnt]='L',ans[2*n-cnt+1]='R',cnt++;
xl++,qr++;
}
else if(a[xr]==a[ql]&&xr!=ql&&check(xr,ql))
{
ans[cnt]='R',ans[2*n-cnt+1]='L',cnt++;
xr--,ql--;
}
else if(a[xr]==a[qr]&&xr>=qr&&check(xr,qr))
{
ans[cnt]='R',ans[2*n-cnt+1]='R',cnt++;
xr--,qr++;
}
else
{
flag=1;
cout<<-1<<endl;
break;
}
}
if(flag==0)
{
for(int i=1;i<=2*n;i++)
putchar(ans[i]);
putchar('\n');
}
}
return 0;
}