边插入边建堆
而不是都读入完成后再调整
样例4的child是指直接孩子
堆从1开始比较好调整
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <unordered_map>
using namespace std;
const int N = 1007;
int arr[N];
int n, m;
int main(){
int x, y;
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; i++){
scanf("%d",arr+i);
if(i == 1) continue;
int j = i;
for(int k = i/2; k > 0; k/=2){
if(arr[j] < arr[k]){
swap(arr[j], arr[k]);
j = k;
}
else break;
}
}
unordered_map<int, int> mp;
for(int i = 1; i <= n; i++){
mp[arr[i]] = i;
}
getchar();
while(m--){
string str;
scanf("%d", &x);
cin>>str;
if(str[0] == 'a'){ //样例2
cin>>y;
getline(cin, str);
if(mp[x]/2 == mp[y]/2) puts("T");
else puts("F");
}else{
cin>>str;
if(str[0] == 'a'){ //样例4
cin>>str;
cin>>str;
cin>>y;
bool flag = false;
int u = mp[x]/2;
if(arr[u] == y) puts("T");
else puts("F");
}else{
cin>>str;
if(str[0] == 'r'){
if(arr[1] == x) puts("T");
else puts("F");
}else{
cin>>str;
cin>>y;
int u = mp[y]/2;
if(arr[u] == x) puts("T");
else puts("F");
}
}
}
}
return 0;
}
本文介绍了一种在数据插入过程中即时构建堆的数据结构算法,避免了数据全部加载后再进行堆调整的传统方式,通过实时调整提高了效率。文章通过具体代码示例展示了如何实现这一算法,并在主函数中通过读取输入数据进行堆的构建与维护。
605

被折叠的 条评论
为什么被折叠?



