L2-012. 關於堆的判斷
阿新 • • 發佈:2019-02-17
#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; }