第一次了解到堆排序
和完全二叉树有关 详情见代码 关于堆的建立
小顶堆 父节点小于子结点
大顶堆 父节点大于子结点
#include <bits/stdc++.h> using namespace std; int s[10005]; int n; int pos(int x) { for(int i=1;i<=n;i++) if(s[i]==x)return i; } int main() { int k;int q; scanf("%d%d",&n,&q); for(int i=1;i<=n;i++) { scanf("%d",&s[i]); int k=i; while(k>1&&s[k]<s[k/2]) { swap(s[k],s[k/2]); k/=2; } } int a,b; string str; while(q--) { scanf("%d",&a); cin>>str; if(str=="and") { scanf("%d",&b); cin>>str; cin>>str; if(pos(a)/2==pos(b)/2)puts("T"); else puts("F"); } else { cin>>str; if(str=="a") { cin>>str; cin>>str; scanf("%d",&b); if(pos(b)==pos(a)/2) puts("T"); else puts("F"); } else { cin>>str; if(str=="root") { if(s[1]==a)puts("T"); else puts("F"); } else { cin>>str; scanf("%d",&b); if(pos(a)==pos(b)/2) puts("T"); else puts("F"); } } } } return 0; }