小顶堆性质:根节点小于等于子树的完全二叉树。
c++代码:
int a[MAX],cnt;
map<int,int>p;
void creat(int x){ //小顶堆建树
a[++cnt]=x;
int t=cnt;
while(t>1&&(a[t/2]>a[t])){
swap(a[t/2],a[t]);
t/=2;
}
a[t]=x;
}
void solve()
{
int n,m;
cin >>n>>m;
for(int i=1;i<=n;i++){
int x;
cin >>x;
creat(x);
}
for(int i=1;i<=n;i++){ //map颠倒
p[a[i]]=i;
}
int x,y;
string s;
for(int i=1;i<=m;i++){
cin >>x>>s;
if(s[0]=='a'){
cin >>y>>s>>s;
if(p[x]/2==p[y]/2) cout <<"T"<<endl;
else cout <<"F"<<endl;
}
else{
cin >>s>>s;
if(s[0]=='r'){
if(p[x]==1) cout <<"T"<<endl;
else cout <<"F"<<endl;
}
else if(s[0]=='p'){
cin >>s>>y;
if(p[y]/2==p[x]) cout <<"T"<<endl;
else cout <<"F"<<endl;
}
else{
cin >>s>>y;
if(p[x]/2==p[y]) cout <<"T"<<endl;
else cout <<"F"<<endl;
}
}
}
}