【题解】
坑点在于,必须要边输入边建立最小堆。还有记得考虑x,y可能为负。
建立最小堆可手写也可用STL的建堆函数make_heap()。
【代码】
int h[2000];
int n;
/* 手写建立最小堆
void siftdown(int pos,int len)
{
int flag=1;
while(flag){
int t=pos;
if(pos*2<=len&&h[t]>h[pos*2]) t=pos*2;
if(pos*2+1<=len&&h[t]>h[pos*2+1]) t=pos*2+1;
if(t!=pos)
{
swap(h[t],h[pos]);
pos=t;
}
else flag=0;
}
}
void create(int len)
{
for(int i=len/2;i>=1;i--)
siftdown(i,len);
}
*/
int Find(int x)
{
for(int i=1;i<=n;i++)
if(h[i]==x)
return i;
}
int main()
{
int m; scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&h[i]);
make_heap(h+1,h+i+1,greater<int>());
create();