题目:

思路分析:
链表的方式建立一个小根堆就行
代码实现:
const int MAX=10010;
int n,m;
int cnt;
int dui[MAX];
map<int,int>p;
void built(int x){
dui[++cnt]=x;
int t=cnt;
while (t>1&&dui[t/2]>dui[t]) {
swap(dui[t/2],dui[t]);
t/=2;
}
// cout<<"t: "<<x<<endl;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x;
cin>>x;
built(x);
}
for(int i=1;i<=n;i++){
p[dui[i]]=i;
}
while(m--){
string str;
int x, y;
cin >> x >> str;
if(str[0]=='a'){
cin>>y>>str>>str;
if(p[x]/2==p[y]/2)
cout<

该博客讨论了如何使用链表方式构建小根堆,并提供了代码实现。主要涉及堆的插入操作,同时处理了多个查询和更新操作,包括判断节点是否在同一层、节点的父节点和子节点关系、替换节点以及检查根节点条件等。
最低0.47元/天 解锁文章
359

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



