卧槽。。没看清 值 还有负的。。
PS: 注意他说是一个一个插入的,也就是插在完全二叉树的最末位置,然后向上更新。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int a[1010];
void BuildMinHeap(int n)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
int j=i;
while(a[j]<a[j/2]&&j>1)
{
swap(a[j],a[j/2]);
j/=2;
}
}
}
int main()
{
int x,y,len,k,n;
char s[110];
scanf("%d%d",&n,&k);
BuildMinHeap(n);
while(k--)
{
int flag,ff=0;
scanf("%d",&x);
gets(s);
len=strlen(s);
y=0;
for(int i=0;i<len;i++)
{
if(s[i]=='-') ff=1;
if(i+1<len&&s[i]=='r'&&s[i+1]=='o') flag=1;
if(i+1<len&&s[i]=='s'&&s[i+1]=='i') flag=2;
if(i+1<len&&s[i]=='p'&&s[i+1]=='a') flag=3;
if(i+1<len&&s[i]=='c'&&s[i+1]=='h') flag=4;
if(s[i]>='0'&&s[i]<='9') y=y*10+s[i]-'0';
}
if(ff) y=-y;
if(flag==1)
{
if(x==a[1]) puts("T");
else puts("F");
}
else if(flag==2)
{
bool f=false;
for(int i=1;(2*i+1)<=n;i++)
if((a[2*i]==x&&a[2*i+1]==y)||(a[2*i]==y&&a[2*i+1]==x))
{puts("T");f=true;break;}
if(!f) puts("F");
}
else if(flag==3)
{
bool f=false;
for(int i=1;i<=n;i++)
{
if(a[i]==x)
if(2*i<=n&&a[2*i]==y){puts("T");f=true;break;}
if(a[i]==x)
if((2*i+1)<=n&&a[2*i+1]==y){puts("T");f=true;break;}
}
if(!f) puts("F");
}
else if(flag==4)
{
bool f=false;
for(int i=1;i<=n;i++)
{
if(a[i]==y)
if(2*i<=n&&a[2*i]==x){puts("T");f=true;break;}
if(a[i]==y)
if((2*i+1)<=n&&a[2*i+1]==x){puts("T");f=true;break;}
}
if(!f) puts("F");
}
}
return 0;
}