洛谷二刷P4715 【深基16.例1】淘汰赛(c嘎嘎)

题目链接:P4715 【深基16.例1】淘汰赛 - 洛谷 | 计算机科学教育新生态

题目难度普及

  刷题心得:本题是我二刷,之前第一次刷是在洛谷线性表那个题单,当时印象深刻第  一篇题解是用的树来做,当时我不屑一顾(觉得花里胡哨),现在我开始刷树的题目着字分析,第一次学习到线性树的用法现在把他总结下

 

线段树

线段树是一种二叉树,也就是对于一个线段,我们会用一个二叉树来表示。比如说一个长度为4的线段,我们可以表示成这样:

这是什么意思呢? 如果你要表示线段的和,那么最上面的根节点的权值表示的是这个线段 1 ∼ 6 的和。根的两个儿子分别表示这个线段中 1 ∼ 3 和4 ~6的和,以此类推。

然后我们还可以的到一个性质:节点 i的权值 == 它的左儿子权值 +它的右儿子权值。

我们知道,一颗从 1 11 开始编号的二叉树,结点 i的左儿子和右儿子编号分别是i x 2 和 i x 2 + 1

建树代码

void build(int node,int start,int end){   //建树函数,参数是根节点和左右区间 if(start==end){		//如果两边相等 tree[node]=arr[start]; //填的就是数组里的初始值 return;  //递归边界 }int leftnode=node*2;  //算出左右节点(完全二叉树的性质) int rightnode=node*2+1;  int mid=(start+end)/2;    //把数组从中间劈成两半build(leftnode,start,mid);  //左边右边分开建树 build(rightnode,mid+1,end);tree[node]=tree[leftnode]+tree[rightnode]; //根节点的值=左根+右根 
}

查询和求区间和:

void update(int node,int start,int end,int id,int val){      //修改操作,参数分别是建树函数的那三个和修改节点的编号和修改的值if(start==end){ //递归边界,如果是叶节点tree[node]+=val; //修改node节点的值return;}int leftnode=node*2;  //算出左右子树和中点int rightnode=node*2+1;  int mid=(start+end)/2;   if(id>=start&&id<=mid) //如果要改的地方在中点左边update(leftnode,start,mid,id,val);//那就递归修改左子树else update(rightnode,mid+1,end,id,val);//要么就递归修改右子树	tree[node]=tree[leftnode]+tree[rightnode]; //根节点更新 
} 
int query(int node,int start ,int end,int l,int r){ //查询函数,l和r是求和的左右区间if(l<=start&&r>=end)  //如果求和的区间已经当前的部分包含了
//(比如当前在[1,3]区间,让你求[1,5],那你就要求[1,3]+[4,5],直接把建树的时候算好的[1,3]的和加上去就行了)return tree[node]; //直接返回根节点int leftnode=node*2;  //又双叒叕是左右子树和中点int rightnode=node*2+1;  int mid=(start+end)/2;int sum=0; //就是要返回的和啊   if(l<=mid) //如果要求和的区间包含中点左边的部分sum+=query(leftnode,start,mid,l,r); //那就加上左边那块if(r>mid) //同理,如果右边还有那就加上右边那块sum+=query(rightnode,mid+1,end,l,r);return sum; //返回sum,不解释
}

线段树好处:所以介绍了这么多线段树,线段树到底有什么用前缀和不是也可以求和吗,可是如果修改一个值再求和前缀和,每一个前缀和都要修改时间复杂度就是o(n)了,线段树它可以把时间复杂度降低降低再降低,把修改和查询的时间复杂度都降到O(log⁡n)。

最后奉上本题代码:

#include<bits/stdc++.h>  // 万能头文件
using namespace std;
typedef long long ll;
//const int N = 100010;      
int n;struct node{int power;//能力值 int id;//国家序号 
}a[150],tree[600]; //a用来存储数据,tree是存线段树的数组 node maxn(node a,node b){  //返回两个结构体里能力值更大的那个return a.power>b.power?a:b;
}
node minn(node a,node b)
{return a.power < b.power ? a : b;//返回两个结构体里能力值更小的那个
}
void build(int node,int start,int end)//建树函数,参数是根节点和左右节点 
{if(start == end)//两边相等 {tree[node] = a[start];//填的就是数组的初始值 ,即叶子节点不需要划分 return;//边界 }int leftNode = node * 2;//算出左右节点(完全二叉树的性质) int rightNode = node * 2 + 1;int mid = (start + end) / 2;//把数组从中间分开 build(leftNode,start,mid);build(rightNode,mid + 1,end);tree[node]=  maxn(tree[leftNode],tree[rightNode]);  //父节点是左右子节点里更大的;
}
int main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n;for(int i=1; i<= (1<<n); i++){cin >> a[i].power;a[i].id = i;}build(1,1,(1<<n));cout<<minn(tree[2],tree[3]).id;return 0;  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/483435.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Matlab BP神经网络的电力负荷预测模型研究与实现

随着电力系统的复杂性和规模的不断增长&#xff0c;准确的电力负荷预测对于电网的稳定性和运行效率至关重要。传统的负荷预测方法依赖于历史数据和简单的统计模型&#xff0c;但这些方法在处理非线性和动态变化的负荷数据时&#xff0c;表现出较大的局限性。近年来&#xff0c;…

非标自动化行业ERP选型与案例展示!

非标自动化行业&#xff0c;那么使用的就是非标设备&#xff0c;什么是非标设备呢?用一句话来说明就是指设计制造方面没有形成国家标准的设备。 在如今追求高效的社会&#xff0c;各行各业都朝着提高效率精益工艺&#xff0c;缩减流程&#xff0c;调整业务&#xff0c;用各种…

十、软件设计架构-微服务-服务调用Dubbo

文章目录 前言一、Dubbo介绍1. 什么是Dubbo 二、实现1. 提供统一业务api2. 提供服务提供者3. 提供服务消费者 前言 服务调用方案--Dubbo‌ 基于 Java 的高性能 RPC分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案。…

【AI系统】CANN 算子类型

CANN 算子类型 算子是编程和数学中的重要概念&#xff0c;它们是用于执行特定操作的符号或函数&#xff0c;以便处理输入值并生成输出值。本文将会介绍 CANN 算子类型及其在 AI 编程和神经网络中的应用&#xff0c;以及华为 CANN 算子在 AI CPU 的详细架构和开发要求。 算子基…

uniapp使用扩展组件uni-data-select出现的问题汇总

前言 不知道大家有没有学习过我的这门课程那&#xff0c;《uniCloud云开发Vue3版本官方推荐用法》&#xff0c;这么课程已经得到了官方推荐&#xff0c;想要快速上手unicloud的小伙伴们&#xff0c;可以学习一下这么课程哦&#xff0c;不要忘了给一键三连呀。 在录制这门课程…

TypeScript和JavaScript区别详解

文章目录 TypeScript和JavaScript区别详解一、引言二、类型系统1、静态类型检查TypeScript 示例JavaScript 示例 2、类型推断TypeScript 示例JavaScript 示例 三、面向对象编程TypeScript 示例JavaScript 示例 四、使用示例1. 环境搭建2. 创建TypeScript项目3. 安装TypeScript插…

前端开发 之 15个页面加载特效上【附完整源码】

文章目录 一&#xff1a;彩球环绕加载特效1.效果展示2.HTML完整代码 二&#xff1a;跷跷板加载特效1.效果展示2.HTML完整代码 三&#xff1a;两个圆形加载特效1.效果展示2.HTML完整代码 四&#xff1a;半环加载特效1.效果展示2.HTML完整代码 五&#xff1a;音乐波动加载特效1.效…

基于C#+SQLite开发数据库应用的示例

SQLite数据库&#xff0c;小巧但功能强大&#xff1b;并且是基于文件型的数据库&#xff0c;驱动库就是一个dll文件&#xff0c;有些开发工具 甚至不需要带这个dll&#xff0c;比如用Delphi开发&#xff0c;用一些三方组件&#xff1b;数据库也是一个文件&#xff0c;虽然是个文…

生态环境一体化智慧监管平台

在数字化和智能化的浪潮中&#xff0c;生态环境保护与治理正迎来革命性的变化。生态环境一体化智慧监管平台的建设&#xff0c;不仅响应了这一趋势&#xff0c;而且为中国式现代化的生态治理提供了新的解决方案。本文将深度分析该平台的建设内容&#xff0c;探讨其在推动生态文…

3.4 朴素贝叶斯算法

3.4 朴素贝叶斯算法 朴素&#xff1f; 假设&#xff1a;特征与特征之间是相互独立的 应用&#xff1a;文本分类&#xff0c;单词作为特征 3.4.1 什么是朴素贝叶斯算法 朴素贝叶斯&#xff08;Naive Bayes&#xff09;是一种基于贝叶斯定理的简单概率分类器&#xff0c;它假…

使用Mybatis-Plus时遇到的报错问题及解决方案

创建Maven项目后&#xff0c;一个个手动添加spring-boot和mybatis-plus依赖冲突问题 解决方案&#xff1a;找一个现成的pom.xml文件替换后重新加载&#xff08;以下提供java8&#xff0c;对应的spring-boot,mybatis-plus依赖&#xff09; <?xml version"1.0" en…

VSCode如何关闭Vite项目本地自启动

某些情况下VSCode打开Vite项目不需要自动启动&#xff0c;那么如何关闭该功能 文件>首选项>设置 搜索vite 将Vite:Auto Start 勾选取消即可

物联网——WatchDog(监听器)

看门狗简介 独立看门狗框图 看门狗原理&#xff1a;定时器溢出&#xff0c;产生系统复位信号&#xff1b;若定时‘喂狗’则不产生系统复位信号 定时中断基本结构&#xff08;对比&#xff09; IWDG键寄存器 独立看门狗超时时间 WWDG(窗口看门狗) WWDG特性 WWDG超时时间 由于…

在办公室环境中用HMD替代传统显示器的优势

VR头戴式显示器&#xff08;HMD&#xff09;是进入虚拟现实环境的一把钥匙&#xff0c;拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域&#xff0c;正如如今的互联网一样&#xff0c;虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…

黑马2024AI+JavaWeb开发入门Day04-SpringBootWeb入门-HTTP协议-分层解耦-IOCDI飞书作业

视频地址&#xff1a;哔哩哔哩 讲义作业飞书地址&#xff1a;day04作业&#xff08;IOC&DI&#xff09; 作业很简单&#xff0c;主要是练习拆分为三层架构controller、service、dao&#xff0c;并基于IOC & DI进行解耦。 1、结构&#xff1a; 2、代码 网盘链接&…

【iOS】多线程基础

【iOS】多线程基础 文章目录 【iOS】多线程基础前言进程与线程进程进程的状态进程的一个控制结构进程的上下文切换 线程为什么要用线程什么是线程线程和进程的关系线程的上下文切换 线程和进程的优缺点 小结 前言 笔者由于对于GCD不是很了解&#xff0c;导致了项目中网络请求哪…

Android矩阵Matrix在1张宽平大Bitmap批量绘制N个小Bitmap,Kotlin(1)

Android矩阵Matrix在1张宽平大Bitmap批量绘制N个小Bitmap&#xff0c;Kotlin&#xff08;1&#xff09; import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas import android.graphics.Color import android.graphics.Matri…

vue2+svg+elementui实现花瓣图自定义el-select回显色卡图片

项目需要实现花瓣图&#xff0c;但是改图表在echarts&#xff0c;highCharts等案例中均未出现&#xff0c;有类似的韦恩图&#xff0c;但是和需求有所差距&#xff1b; 为实现该效果&#xff0c;静态图表上采取svg来手动绘制花瓣&#xff1a; 确定中心点&#xff0c;以该点为中…

二百七十八、ClickHouse——将本月第一天所在的那一周视为第一周,无论它是从周几开始的,查询某个日期是本月第几周

一、目的 ClickHouse指标表中有个字段week_of_month&#xff0c;含义是这条数据属于本月第几周。 而且将本月第一天所在的那一周视为第一周&#xff0c;无论它是从周几开始的。比如2024-12-01是周日&#xff0c;即12月第一周。而2024-12-02是周一&#xff0c;即12月第二周 二…

快充协议IC支持全协议,内部集成LDO支持输出电压3.3V,支持宽电压范围3.3~30V

随着快充技术的不断发展&#xff0c;越来越多的电子产品都使用上了快充&#xff0c;市面上大多数受电端取电芯片只有取电功能&#xff0c;而有些产品则需要更多功能支持&#xff0c;例如产品需要快充支持又要读取电压&#xff0c;就只能在使用取电协议芯片的同时再增加一颗串口…