L2-012 关于堆的判断
#include<iostream>
#include<stdio.h>
#include<vector>
#include<cmath>
#include<map>
#include<algorithm>
#include<queue>
using namespace std;
int n,m,x;
int heap[1001];
vector<int> a;
map<int,int> mp;
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>x;
a.push_back(x);
make_heap(a.begin(),a.end(),greater<int>());
}
for(int i=0;i<n;i++)
{
heap[i+1]=a[i];
}
for(int i=1;i<=n;i++) mp[heap[i]]=i;
int x,y;
string s;
for(int i=0;i<m;i++)
{
cin>>x;
cin>>s;
if(s[0]=='a')
{
cin>>y>>s>>s;
if(mp[x]/2==mp[y]/2) printf("T\n");
else printf("F\n");
}
else
{
cin>>s;
cin>>s;
if(s[0]=='r')
{
if(mp[x]==1) printf("T\n");
else printf("F\n");
}
else if(s[0]=='p')
{
cin>>s;
cin>>y;
if(mp[x]==mp[y]/2) printf("T\n");
else printf("F\n");
}
else if(s[0]=='c')
{
cin>>s;
cin>>y;
if(mp[y]==mp[x]/2) printf("T\n");
else printf("F\n");
}
}
}
return 0;
}