做法是双指针加上讨论,但是第二个点就RE了
#include<bits/stdc++.h>
using namespace std;
const int Maxn = 1e5 + 5;
int n, t, p[Maxn], q[Maxn];
char s[Maxn];
int main(){
cin >> t;
while(t --){
memset(s, 0, sizeof(s));
cin >> n;
for(int i = 1; i <= n; i ++) cin >> p[i];
int i = 1, j = n, cnt = 0;
while(i < j){
if(cnt == 0){
q[++ cnt] = p[i ++];
s[cnt] = 'L';
continue;
}
if(q[cnt] > q[cnt - 1]){
if(p[i] > q[cnt] && p[j] > q[cnt]){
if(p[i] > p[j]){
q[++ cnt] = p[i ++];
s[cnt] = 'L';
q[++ cnt] = p[j --];
s[cnt] = 'R';
}
else{
q[++ cnt] = p[j --];
s[cnt] = 'R';
q[++ cnt] = p[i ++];
s[cnt] = 'L';
}
}
else{
if(p[i] < p[j]){
q[++ cnt] = p[i ++];
s[cnt] = 'L';
}
else{
q[++cnt] = p[j --];
s[cnt] = 'R';
}
}
}
else{
if(p[i] < q[cnt] && p[j] < q[cnt]){
if(p[i] < p[j]){
q[++ cnt] = p[i ++];
s[cnt] = 'L';
q[++ cnt] = p[j --];
s[cnt] = 'R';
}
else{
q[++ cnt] = p[j --];
s[cnt] = 'R';
q[++ cnt] = p[i ++];
s[cnt] = 'L';
}
}
else{
if(p[i] > p[j]){
q[++ cnt] = p[i ++];
s[cnt] = 'L';
}
else{
q[++ cnt] = p[j --];
s[cnt] = 'R';
}
}
}
}
s[++ cnt] = 'L';
for(int i = 1; i <= n; i ++) cout << s[i];
cout << '\n';
}
return 0;
}