1. 程式人生 > >L2-012. 關於堆的判斷

L2-012. 關於堆的判斷

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <string.h>

using namespace std;

vector<int> v;
bool cmp(int a,int b){
  return a > b;
}
int Find(int a){
  return find(v.begin() + 1,v.end(),a) - v.begin();
}
int main(void){
  v.push_back(0);
  int n,q;
  cin>>n>>q;
  for(int i = 0; i < n; i++){
    int a;
    cin>>a;
    v.push_back(a);
    push_heap(v.begin() + 1,v.end(),greater<int>() );
  }
    char s[105]; 
    int a,b;
    getchar();
    while(q--){
      gets(s);
      if(s[strlen(s) - 1] == 't'){
        sscanf(s,"%d",&a);
        if(v[1] == a){
          printf("T\n");
      }
      else{
        printf("F\n");
      }
    }
    else if(s[strlen(s) - 1] == 's'){
      sscanf(s,"%d %*s %d",&a,&b);
      if(Find(a) / 2 == Find(b) / 2){
        printf("T\n");
      }
      else{
        printf("F\n");
      }
    }
    else{
      char temp[10];
      sscanf(s,"%d %*s %s %*s %*s %d",&a,temp,&b);
      if(temp[0] == 't'){
        if(Find(a) * 2 == Find(b) || Find(a) * 2 + 1 == Find(b)){
          printf("T\n");
        }
        else{
          printf("F\n");
        }
      }
      else{
        if(Find(b) * 2 == Find(a) || Find(b) * 2 + 1 == Find(a)){
          printf("T\n");
        }
        else{
          printf("F\n");
        }
      }
    }
  }
  return 0;
}