L2-012 关于堆的判断

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leekerian/article/details/88056158

构建堆

#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;
}

猜你喜欢

转载自blog.csdn.net/leekerian/article/details/88056158