1147 Heaps (30 分)难度: 一般 / 知识点: 堆 模拟
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1147 Heaps (30 分)难度: 一般 / 知识点: 堆 模拟 相关的知识,希望对你有一定的参考价值。
https://pintia.cn/problem-sets/994805342720868352/problems/994805342821531648
直接按照堆模拟即可,如果对于每一个根来说,它又是大根堆,又是小根堆,那么就矛盾了。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,m;
vector<int>ans;
void dfs(int u)
if(u*2<=n) dfs(u*2);
if(u*2+1<=n) dfs(u*2+1);
ans.push_back(a[u]);
int main(void)
cin>>m>>n;
while(m--)
for(int i=1;i<=n;i++) cin>>a[i];
bool flag1=0,flag2=0;
for(int i=1;i<=n;i++)
int x=i;
for(int j=0;j<2;j++)
int y=i*2+j;
if(x<=n&&y<=n)
if(a[x]>=a[y]) flag1=true;//说明是大根堆
else flag2=true;//小根堆
if(flag1&&flag2) puts("Not Heap");//即有大,又有小
else if(flag1) puts("Max Heap");
else puts("Min Heap");
ans.clear();
dfs(1);
for(int i=0;i<ans.size();i++)
if(i) cout<<" ";
cout<<ans[i];
cout<<endl;
return 0;
以上是关于1147 Heaps (30 分)难度: 一般 / 知识点: 堆 模拟 的主要内容,如果未能解决你的问题,请参考以下文章