mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
b39288d6ef
5400-5504(END by now)
81 lines
1.8 KiB
C++
81 lines
1.8 KiB
C++
#include<cstdio>
|
|
#include<cstring>
|
|
#include<algorithm>
|
|
using namespace std;
|
|
const int maxn = 1100;
|
|
struct tree{
|
|
int v, l, r, f;
|
|
tree(){}
|
|
tree(int v, int l, int r, int f):v(v), l(l), r(r), f(f){}
|
|
} t[maxn<<2];
|
|
int T, n;
|
|
int pt, sz;
|
|
int st[maxn];
|
|
int a[maxn];
|
|
int ps[maxn];
|
|
bool v[maxn];
|
|
void work(int x){
|
|
int pos = 0, ed = ps[x];
|
|
while(1){
|
|
if (pt > ed) break;
|
|
v[a[pt]] = true;
|
|
if (t[pos].v > a[pt]){
|
|
if (t[pos].r == -1){
|
|
st[a[pt]] = sz;
|
|
t[sz] = tree(a[pt++], -1, -1, pos);
|
|
t[pos].r = sz;
|
|
pos = sz++;
|
|
}
|
|
else pos = t[pos].r;
|
|
}
|
|
else{
|
|
if (t[pos].l == -1){
|
|
st[a[pt]] = sz;
|
|
t[sz] = tree(a[pt++], -1, -1, pos);
|
|
t[pos].l = sz;
|
|
pos = sz++;
|
|
}
|
|
else pos = t[pos].l;
|
|
}
|
|
}
|
|
}
|
|
char s[1100];
|
|
void output(int x){
|
|
int len = 0, px;
|
|
while(1){
|
|
px = x;
|
|
x = t[x].f;
|
|
if (x == -1) break;
|
|
if (t[x].l == px) s[len++] = 'W';
|
|
else s[len++] = 'E';
|
|
}
|
|
for (int i = 0, j = len-1; i < j; i++, j--)
|
|
swap(s[i], s[j]);
|
|
s[len] = 0;
|
|
printf("%s\n", s);
|
|
}
|
|
int main()
|
|
{
|
|
scanf("%d", &T);
|
|
while(T--){
|
|
scanf("%d", &n);
|
|
for (int i = 0; i < n; i++){
|
|
v[i+1] = false;
|
|
scanf("%d", &a[i]);
|
|
ps[a[i]] = i;
|
|
}
|
|
sz = 0, pt = 1;
|
|
t[sz++] = tree(a[0], -1, -1, -1);
|
|
v[a[0]] = true;
|
|
for (int i = 1; i <= n; i++)
|
|
if (!v[i]){ work(i); }
|
|
int q, qq;
|
|
scanf("%d", &q);
|
|
for (int i = 0; i < q; i++){
|
|
scanf("%d", &qq);
|
|
output(st[qq]);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|