构建堆
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;
const int MAXN=11111;
int num[MAXN];
int n,m;
map<int,int> q;
int cont;
void build(int t)
{
num[cont++]=t;
int k=cont-1;
while(k>1&&num[k/2]>num[k])
{
swap(num[k/2],num[k]);
k/=2;
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<MAXN;i++)
num[i]=11111;
cont=1;
for(int i=1;i<=n;i++)
{
int t;
cin>>t;
build(t);
}
for(int i=1;i<=n;i++)
q[num[i]]=i;
string s;
for(int i=0; i<m; i++)
{
int x,y;
cin>>x;
cin>>s;
if(s[0]=='a')
{
cin>>y;
getline(cin,s);//可以读空格
if(q[x]/2==q[y]/2) puts("T");
else puts("F");
}
else
{
cin>>s;
cin>>s;
if(s[0]=='r')
{
if(q[x]==1) puts("T");
else puts("F");
}
else if(s[0]=='p')
{
cin>>s;
cin>>y;
if(q[x]==q[y]/2) puts("T");
else puts("F");
}
else
{
cin>>s;
cin>>y;
if(q[x]/2==q[y]) puts("T");
else puts("F");
}
}
}
return 0;
}