当前位置: 首页> 教育> 培训 > 柳州建站_成功的网络营销事件有哪些_企业培训课程体系_中国人民银行网站

柳州建站_成功的网络营销事件有哪些_企业培训课程体系_中国人民银行网站

时间:2025/7/11 8:04:24来源:https://blog.csdn.net/2401_87338545/article/details/143994901 浏览次数:1次
柳州建站_成功的网络营销事件有哪些_企业培训课程体系_中国人民银行网站

题目一:推排序

838. 堆排序 - AcWing题库

分析

 

代码 

优先队列,sort 也能解。

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;
int h[N], idx;int n, m;void down(int u) {int t = u;// 根、左孩子、右孩子中最小值,然后和根交换值if(2*u<=idx && h[t] > h[u*2]) t = 2*u;if(2*u+1<=idx && h[t] > h[u*2+1]) t = u*2+1;if(u != t) {swap(h[u],h[t]);down(t);}
}int main() {cin >> n >> m;for(int i = 1; i <= n; i ++) cin >> h[i];idx = n;// 建堆for(int i = n/2; i > 0; i --) down(i);while(m --) {cout << h[1] << " ";h[1] = h[idx--];down(1);}return 0;
}

题目二、模拟堆

839. 模拟堆 - AcWing题库

分析

代码

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;int h[N], idx;
int hp[N], ph[N], num;// a b 是完全二叉树中对应位置
void heap_swap(int a, int b) {swap(ph[hp[a]],ph[hp[b]]);swap(hp[a],hp[b]);swap(h[a],h[b]);
}
// 向下,两分枝最小值交换,大则向下/三者比较
void down(int u) {int t = u;if(2*u <= idx && h[t] > h[2*u]) t = 2*u;if(2*u+1 <= idx && h[t] > h[2*u+1]) t = 2*u+1;if(u!=t) {heap_swap(t,u);down(t);}
}
// 小则向上,两比较
void up(int u) {while(u/2>0 && h[u/2] > h[u]) {heap_swap(u/2,u);u /= 2; }
}int main() {int _;cin >> _;while(_ --) {int k, x;char op[3];cin >> op;//用string也可以,用 char* 的比较函数也行strcmp// 插入xif(!strcmp(op,"I")) {cin >> x;idx ++, num ++;ph[num] = idx, hp[idx] = num;h[idx] = x;up(idx);}//输出min (堆顶)else if(!strcmp(op,"PM")) cout << h[1] << endl;//删除minelse if(!strcmp(op,"DM")) {heap_swap(1,idx);idx --;down(1);}// 删除第k个插入的值else if(!strcmp(op,"D")) {cin >> k;k = ph[k];heap_swap(k,idx);idx --;down(k); up(k);}// 修改第k个插入的值为xelse if(!strcmp(op,"C")) {cin >> k >> x;k = ph[k];h[k] = x;down(k), up(k);}}return 0;
}

关键字:柳州建站_成功的网络营销事件有哪些_企业培训课程体系_中国人民银行网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: