解题思路:要是在ACM里谁会自己去写堆,但是PAT......
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int s[1009],cnt;
char t[100],tp[100];
void insert(int a)
{
cnt++;
int q=cnt,p=q/2;
while(p>=1&&a<s[p])
{
s[q]=s[p];
q=p;
p=q/2;
}
s[q]=a;
}
int find(int a)
{
for(int i=1;i<=cnt;i++)
if(s[i]==a)
return i;
}
int main()
{
int n,m,a,b;
//freopen("t.txt","r",stdin);
scanf("%d%d",&n,&m);
cnt=0;
while(n--)
{
scanf("%d",&a);
insert(a);
}
while(m--)
{
scanf("%d",&a);
scanf("%s",t);
if(t[0]=='a')
{
scanf("%d",&b);
scanf("%s%s",t,tp);
int k1=find(a),k2=find(b);
if(k1/2==k2/2)
printf("T\n");
else
printf("F\n");
}else
{
scanf("%s",t);
if(t[0]=='a')
{
scanf("%s%s",t,tp);
scanf("%d",&b);
int k1=find(a),k2=find(b);
if(k1/2==k2)
printf("T\n");
else
printf("F\n");
}else
{
scanf("%s",t);
if(t[0]=='r')
{
if(find(a)==1)
printf("T\n");
else
printf("F\n");
}else
{
scanf("%s",t);
scanf("%d",&b);
if(find(b)/2==find(a))
printf("T\n");
else
printf("F\n");
}
}
}
}
return 0;
}