当前位置:网站首页>PAT 1167 Cartesian Tree(30)
PAT 1167 Cartesian Tree(30)
2022-08-01 12:51:00 【此杭非彼航】
题目


代码
参考代码(有注释)
#include<bits/stdc++.h>
using namespace std;
vector<int> ins;//中序遍历
struct node{
int index, id;
};
vector<node> ans;
bool cmp(node a, node b){
return a.index < b.index;
}
void levelorder(int inl, int inr, int root, int index){
//index层序遍历的下标
if(inl > inr || root < inl || root > inr) return;//超出边界
int i = inl, j = root + 1,minl = ins[inl], minr = ins[root + 1];//左右界限的下标及其对应的值
for(int l = inl; l<root; l++)
if(ins[l] < minl){
//左侧最小值
i = l;
minl = ins[l];
}
for(int p = root + 1; p<= inr; p++){
//右侧最小值
if(ins[p] < minr){
j = p;
minr = ins[p];
}
}
ans.push_back({
index, ins[root]});
levelorder(inl, root - 1, i, 2 * index);//递归左子树
levelorder( root+ 1, inr, j, 2 * index + 1);//递归右子树
}
int main(){
int n, root, minn = INT_MAX, tag;
cin >> n;
ins.resize(n + 1);
for(int i = 1; i <= n; i++){
cin >> ins[i];
if(ins[i] < minn){
//找到根节点
minn = ins[i];
root=i;
}
}
levelorder(1, n, root, 1);
sort(ans.begin(),ans.end(), cmp);
for(int i = 0 ; i < ans.size(); i++)
printf("%d%c", ans[i].id, i < ans.size() - 1? ' ' : '\n');
return 0;
}
复现代码
#include<bits/stdc++.h>
using namespace std;
vector<int> in;
struct node{
int val,index;
};
vector<node> ans;
bool cmp(node x,node y){
return x.index<y.index;
}
void levelorder(int l,int r,int root,int index){
if(l>r||root<l||root>r) return;
int posl=l,posr=r;
for(int i=l+1;i<root;i++){
if(in[i]<in[posl]){
posl=i;
}
}
for(int i=r-1;i>root;i--){
if(in[i]<in[posr]){
posr=i;
}
}
ans.push_back({
in[root],index});
// cout<<in[root]<<endl;
levelorder(l,root-1,posl,index*2);
levelorder(root+1,r,posr,index*2+1);
}
int main()
{
int n,minn=INT_MAX,root=-1;
cin>>n;
in.resize(n);
for(int i=0;i<n;i++){
cin>>in[i];
if(in[i]<minn){
minn=in[i];
root=i;
}
}
// cout<<minn<<" "<<root<<endl;
levelorder(0,n-1,root,1);
sort(ans.begin(),ans.end(),cmp);
for(int i=0;i<ans.size();i++){
cout<<ans[i].val;
if(i!=ans.size()-1) cout<<" ";
}
}
参考文章
边栏推荐
- bpmn-process-designer基础上进行自定义样式(工具、元素、菜单)
- Grafana9.0发布,Prometheus和Loki查询生成器、全新导航、热图面板等新功能!
- 多线程案例——定时器
- Do wildcard SSL certificates not support multiple domains?
- Programmer's Romantic Tanabata
- 找出相同属性值的对象 累加数量 汇总
- Software designer test center summary (interior designer personal summary)
- 并发编程10大坑,你踩过几个?
- 8. SAP ABAP OData 服务如何支持创建(Create)操作
- 一文带你彻底厘清 Kubernetes 中的证书工作机制
猜你喜欢

Dameng replaces the officially authorized dm.key

bpmn-process-designer基础上进行自定义样式(工具、元素、菜单)

消息中间件解析 | 如何正确理解软件应用系统中关于系统通信的那些事?

阿里云官方 Redis 开发规范

关于Request复用的那点破事儿。研究明白了,给你汇报一下。

如何使用 Authing 单点登录,集成 Discourse 论坛?

数据湖 delta lake和spark版本对应关系

Beyond Compare 4 trial period expires

Find objects with the same property value Cumulative number Summarize

HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
随机推荐
软件测试之发现和解决bug
Dameng replaces the officially authorized dm.key
批量任务导入到数据库中
关于亚马逊测评,你了解多少?
关于Request复用的那点破事儿。研究明白了,给你汇报一下。
Alibaba Cloud Official Redis Development Specification
tensorflow2.0 handwritten digit recognition (tensorflow handwriting recognition)
shell 中的 分发系统 expect脚本 (传递参数、自动同步文件、指定host和要传输的文件、(构建文件分发系统)(命令批量执行))
LeetCode_动态规划_中等_313.超级丑数
How does the SAP ABAP OData service support the Create operation trial version
模型运营是做什么的(概念模型数据库)
易周金融分析 | 银行ATM机智能化改造提速;互联网贷款新规带来挑战
10年稳定性保障经验总结,故障复盘要回答哪三大关键问题?|TakinTalks大咖分享
SQL functions STR
库函数的模拟实现(strlen)(strcpy)(strcat)(strcmp)(strstr)(memcpy)(memmove)(C语言)(VS)
力扣160题,相交链表
How to Integrate Your Service Registry with Istio?
tensorflow2.0手写数字识别(tensorflow手写体识别)
Grafana 9.0 released, Prometheus and Loki query builders, new navigation, heatmap panels and more!
How do we do full-link grayscale on the database?