是 STL 太慢了吗?
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 1e5;
int a[N];
int n;
inline int read()
{
int x = 0, y = 1;
char c = getchar();
while(c < '0' || c > '9')
{
if(c == '-') y = -1;
c = getchar();
}
while(c >= '0' && c <= '9')
{
x = (x << 1) + (x << 3) + c - '0';
c = getchar();
}
return x * y;
}
string solve()
{
string res, res1, res2;
deque<int> q1;
deque<int> q2;
q1.push_back(a[1]);
bool bj = false;
for(int i = 2; i <= 2 * n; i++)
{
if(a[i] == a[1]) bj = true;
if(!bj) q1.push_back(a[i]);
else q2.push_front(a[i]);
}
bj = false;
for(int i = 1; i <= n; i++)
{
int a1 = 0, a2 = 0, b1 = 0, b2 = 0;
if(!q1.empty())
{
a1 = q1.front();
a2 = q1.back();
}
if(!q2.empty())
{
b1 = q2.front();
b2 = q2.back();
}
if((int)q1.size() != 1 && a1 == a2 && a1)
{
res1 += 'L';
res2 = 'L' + res2;
q1.pop_front();
q1.pop_back();
}
else if(a1 == b2 && a1)
{
res1 += 'L';
res2 = 'R' + res2;
q1.pop_front();
q2.pop_back();
}
else if(a2 == b1 && a2)
{
res1 += 'R';
res2 = 'L' + res2;
q1.pop_back();
q2.pop_front();
}
else if((int)q2.size() != 1 && b1 == b2 && b1)
{
res1 += 'R';
res2 = 'R' + res2;
q2.pop_front();
q2.pop_back();
}
else
{
bj = true;
break;
}
}
if(!bj) return res1 + res2;
res1.clear();
res2.clear();
q1.clear();
q2.clear();
q2.push_back(a[n * 2]);
bj = false;
for(int i = 2 * n - 1; i >= 1; i--)
{
if(a[i] == a[n * 2]) bj = true;
if(!bj) q2.push_back(a[i]);
else q1.push_front(a[i]);
}
for(int i = 1; i <= n; i++)
{
int a1 = 0, a2 = 0, b1 = 0, b2 = 0;
if(!q1.empty())
{
a1 = q1.front();
a2 = q1.back();
}
if(!q2.empty())
{
b1 = q2.front();
b2 = q2.back();
}
if((int)q1.size() != 1 && a1 == a2 && a1)
{
res1 += 'L';
res2 = 'L' + res2;
q1.pop_front();
q1.pop_back();
}
else if(a1 == b2 && a1)
{
res1 += 'L';
res2 = 'R' + res2;
q1.pop_front();
q2.pop_back();
}
else if(a2 == b1 && a2)
{
res1 += 'R';
res2 = 'L' + res2;
q1.pop_back();
q2.pop_front();
}
else if((int)q2.size() != 1 && b1 == b2 && b1)
{
res1 += 'R';
res2 = 'R' + res2;
q2.pop_front();
q2.pop_back();
}
else return "NO";
}
return res1 + res2;
}
int main()
{
// freopen("E:\\下载\\palin\\palin\\palin2.in", "r", stdin);
// freopen("E:\\下载\\palin\\palin\\palin2.out", "w", stdout);
int t;
scanf("%d", &t);
while(t--)
{
n = read();
for(int i = 1; i <= 2 * n; i++)
{
a[i] = read();
}
string ans = solve();
if(ans == "NO")
puts("-1");
else
{
ans[ans.size() - 1] = 'L';
cout << ans << endl;
}
}
return 0;
}