hdu 5444 Elven Postman长春网赛
5444 2333
建二插排序树,dfs一遍,之后o(1)应对查询
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=1008;
struct fuck{
int left,right;
}poi[maxn];
int tol;
struct shit{
char s[maxn];
int idx;
}dp[maxn];
void dfs(int u,int x)
{
if(x<u&&poi[u].left==-1)
{
poi[u].left=x;
poi[x].left=-1;
poi[x].right=-1;
return;
}
if(x>u&&poi[u].right==-1)
{
poi[u].right=x;
poi[x].left=-1;
poi[x].right=-1;
return;
}
if(x<u) dfs(poi[u].left,x);
if(x>u) dfs(poi[u].right,x);
}
void fuckdfs(int u,bool flag,int fa)
{
strcpy(dp[u].s,dp[fa].s);
if(flag==true)
dp[u].s[dp[fa].idx]='E';
else
dp[u].s[dp[fa].idx]='W';
dp[u].idx=dp[fa].idx+1;
dp[u].s[dp[u].idx]='\0';
if(poi[u].left!=-1)
fuckdfs(poi[u].left,true,u);
if(poi[u].right!=-1)
fuckdfs(poi[u].right,false,u);
}
int main()
{
int i,j,n,m,t,x;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
scanf("%d",&x);
int root=x;
poi[root].left=-1;poi[root].right=-1;
dp[root].s[0]='\0';dp[root].idx=0;
for(i=2;i<=n;i++)
{
scanf("%d",&x);
dfs(root,x);
}
if(poi[root].left!=-1)
fuckdfs(poi[root].left,true,root);
if(poi[root].right!=-1)
fuckdfs(poi[root].right,false,root);
scanf("%d",&x);
while(x--)
{
scanf("%d",&j);
printf("%s\n",dp[j].s);
}
}
return 0;
}
浙公网安备 33010602011771号