当前位置:网站首页>2022.8.9考试排列变换--1200题解
2022.8.9考试排列变换--1200题解
2022-08-10 01:55:00 【bj_hacker】
题目
3、排列变换–1200
时间限制: | 空间限制:
题目描述:
给出一个大小为 的排列 ,按如下规则将它转化为一棵有根二叉树:
1.目前这一段(初始时是 中所有数)中的最大值的编号为目前子树(初始时是整棵树)的根的编号;
2.所有在这一段中最大值位置左侧的数形成左子树,按照规则递归处理;
3.所有在这一段中最大值位置右侧的数形成右子树,按照规则递归处理。
比如说,排列 组成的二叉树是这样的:
号为树根,它的左儿子是 号,右儿子是 号; 号左儿子是 号,右儿子是 号; 号左儿子是 号,右
儿子是 号。
请求出每个点在树中的深度(即该点到根的简单路径上有多少条边,特殊地,根的深度为0)。
输入格式:
第一行仅有一个正整数 ( ),表示测试数据的组数。
接下来有 组测试数据:
第一行仅一个正整数 ( ),表示排列大小;
第二行有一个大小为 的排列 用空格隔开。
输出格式:
对于每组测试数据,输出一行 个整数用空格隔开,分别表示 号点的深度。
思路
递归
代码实现
#include<bits/stdc++.h>
using namespace std;
const int maxn=100+10;
int t,n;
int a[maxn],h[maxn];
void search(int l,int r){
if(r<l)return;
int temp=0,t=0;
for(int i=l;i<=r;i++){
h[i]++;
if(a[i]>temp){
temp=a[i];
t=i;
}
}
search(l,t-1);
search(t+1,r);
}
int main(){
scanf("%d",&t);
while(t--){
memset(h,-1,sizeof(h));
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
search(1,n);
for(int i=1;i<=n;i++)printf("%d ",h[i]);
printf("\n");
}
return 0;
}
边栏推荐
猜你喜欢
JCMsuite—单模光纤传播模式
Janus实际生产案例
OpenSSF的开源软件风险评估工具:Scorecards
[论文阅读] Diverse Image-to-Image Translation via Disentangled Representations
HCIP——综合交换实验
In automated testing, test data is separated from scripts and parameterized methods
Nacos源码分析专题(五)-Nacos小结
781. 森林中的兔子
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
FILE结构体在stdio.h头文件源码里的详细代码
随机推荐
【UNR #6 B】机器人表演(DP)
Shell编程--awk
C# winform 单选框
谷歌翻译器-谷歌翻译器软件批量自动翻译
【二叉树-中等】1379. 找出克隆二叉树中的相同节点
mysql -sql编程
Nacos源码分析专题(五)-Nacos小结
Premint工具,作为普通人我们需要了解哪些内容?
Initial attempt at UI traversal
深度学习(五) CNN卷积神经网络
微生物是如何影响身体健康的
华为HCIE云计算之FC添加ipsan数据存储
数据库治理利器:动态读写分离
sqlmap dolog外带数据
Screen 拆分屏幕
实操|风控模型中常用的这三种预测方法与多分类场景的实现
Open3D 网格均匀采样
51单片机驱动HMI串口屏,串口屏的下载方式
ImportError: Unable to import required dependencies: numpy
网络爬虫错误