我觉得这代码应该是o(n)啊,为啥不过
#include<bits/stdc++.h>
#define ll long long
#define fo(i, j, k) for(i = j; i <= k; i++)
#define of(i, j, k) for(i = k; i >= j; i--)
using namespace std;
ll a[1001000], b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
ll minn, maxx, ans, ind;
deque<ll> A, B;
char S[1001000];
ll get(deque<ll> D, ll b)
{
//if(D.empty())return g--;
return b ? D.front() : D.back();
}
int main()
{
scanf("%lld", &t);
while(t--)
{
scanf("%lld", &n);
fo(i, 1, n * 2)scanf("%lld", &a[i]);
fo(p, 0, 1)
{
fo(i, 2, n * 2)if(a[i] == ((p == 0) ? a[1] : a[n * 2]))break;
A.clear();
B.clear();
of(j, 1, i)A.push_front(a[j]);
fo(j, i + 1, n * 2)B.push_front(a[j]);
ind = 0;
while(!(A.empty() && B.empty()))
{
if(A.size() > 1 && get(A, 1) == get(A, 0))
{
A.pop_front();
A.pop_back();
S[ind] = 'L';
S[n * 2 - 1 - ind] = 'L';
}
else if(!(A.empty() || B.empty()) && get(A, 1) == get(B, 0))
{
A.pop_front();
B.pop_back();
S[ind] = 'L';
S[n * 2 - 1 - ind] = 'R';
}
else if(!(A.empty() || B.empty()) && get(B, 1) == get(A, 0))
{
B.pop_front();
A.pop_back();
S[ind] = 'R';
S[n * 2 - 1 - ind] = 'L';
}
else if(B.size() > 1 && get(B, 1) == get(B, 0))
{
B.pop_front();
B.pop_back();
S[ind] = 'R';
S[n * 2 - 1 - ind] = 'R';
}
else break;
ind += 1;
}
if(ind == n)
{
fo(i, 0, n * 2 - 1)putchar(S[i]);
break;
}
else if(p == 1)cout << -1;
}
cout << endl;
}
return 0;
}