zhangzhixu000001 @ 2024-04-15 00:43:02
首先说明:此查找方式为本人即兴写出来的,运用了小根堆向下调整的思想。
正文:heap_find函数到底最后递归什么啊!!!
不递归就会满江紫!!!!!
#include <bits/stdc++.h>
using namespace std;
#define io ios::sync_with_stdio(0)
#define ls(n) n<<1//位运算加速
#define rs(n) n<<1|1//同上
const int maxn=1e6+10;
int heap[maxn],fi[maxn],n,m;
void init()//初始化,爱看不看(不是)
{
io;
cin>>n>>m;
for (int i=1;i<=n;i++) cin>>heap[i];
for (int i=1;i<=m;i++) cin>>fi[i];
return;
}
int heap_find(int num,int find)//堆查找
{
int ans=-1;
if(num>n) return ans;//越界了 ,返回-1
else if (heap[num]==find) {ans=num;return num;}//如果找到了,返回编号
if (heap[ls(num)]<=heap[rs(num)]) heap_find(ls(num),find);//如果左儿子比右儿子小,继续递归左边的
else heap_find(rs(num),find);//否则递归右边的
return ans;
}
int main() {
init();
for (int i=1;i<=m;i++) cout<<heap_find(1,fi[i])<<' ';
return 0;
}
by zhangzhixu000001 @ 2024-04-15 00:45:05
补:返回ans是错的