Codeforces Round 987 (Div. 2)

ABC 略

D

预处理出每个位置的前缀最大和后缀最小。从后向前枚举,如果一个数无法后移,那么答案就是最大前缀,否则答案要不是前缀最大,要不就是这个数先移到前缀最大位置再移到能移到的最大的位置此处的答案。用线段树维护

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N=5e5+10;
int T,n,a[N],pre[N],suf[N],ans[N];
struct tree{int l,r,maxx;
}t[N*4];
void init()
{
}
void build(int p,int l,int r)
{t[p].l=l,t[p].r=r;t[p].maxx=0;if(l==r) return ;int mid=(l+r)/2;build(p*2,l,mid);build(p*2+1,mid+1,r);
}
void add(int p,int x,int k)
{if(t[p].l==t[p].r) {t[p].maxx=max(t[p].maxx,k); return ;}int mid=(t[p].l+t[p].r)/2;if(x<=mid) add(p*2,x,k);if(x>mid) add(p*2+1,x,k);t[p].maxx=max(t[p*2].maxx,t[p*2+1].maxx);
}
int ask(int p,int l,int r)
{if(t[p].l>=l&&t[p].r<=r) return t[p].maxx;int mid=(t[p].l+t[p].r)/2;int val=0;if(l<=mid) val=ask(p*2,l,r);if(r>mid) val=max(val,ask(p*2+1,l,r));return val;
}
void solve()
{cin>>n;init();for(int i=1;i<=n;i++)cin>>a[i];build(1,1,n);for(int i=1;i<=n;i++)pre[i]=max(pre[i-1],a[i]);suf[n]=a[n];for(int i=n-1;i>=1;i--)suf[i]=min(suf[i+1],a[i]);ans[n]=pre[n];add(1,a[n],n);for(int i=n-1;i>=1;i--){if(pre[i]<suf[i+1]){add(1,a[i],i);ans[i]=pre[i];continue;}ans[i]=max(ans[ask(1,1,pre[i]-1)],pre[i]);add(1,a[i],i);}for(int i=1;i<=n;i++)cout<<ans[i]<<" ";cout<<endl;
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie();cin>>T;while(T--) solve();
}

E

设f[x]表示x的子树的最小层数。首先明确删点操作只能增加一个层中点的个数,不能增加层数。一个点如果他的孩子数量<=2,那么f[x]就是它的儿子中最大f+1。当它的孩子>2时,在原二叉树中,父亲和所有儿子不再是全父子关系,存在儿子在原图中是父亲孙子的情况。下面我们将执行一个还原操作,将这个节点的子树还原为二叉树,此时它的孩子全部还原完成且知道还原完的层数。我们每次还原删去的父亲节点的f值就是它的两个孩子的f值中大的那个+1。相当于我们每次取两个孩子合成一个新的孩子,这个孩子的值为之前两个孩子的最大值+1,然后循环操作,直到就剩两个孩子为止,此时这两个孩子合成的就是原父亲节点。贪心每次选最小的两个合成即可,用优先队列维护。

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N=1e6+10;
int T,n,f[N];
vector<int> e[N];
void init()
{for(int i=1;i<=n;i++)e[i].clear();
}
void dfs(int x)
{priority_queue<int> q;for(int y : e[x]){dfs(y);q.emplace(-f[y]);}if(q.empty()) {f[x]=1; return ;}if(q.size()==1) {f[x]=-q.top()+1; return ;}while(q.size()>2){q.pop();int u=-q.top();q.pop();q.emplace(-(u+1));}q.pop();int u=-q.top();q.pop();f[x]=u+1;
}
void solve()
{cin>>n;init();for(int i=2;i<=n;i++){int x;cin>>x;e[x].emplace_back(i);}dfs(1);cout<<f[1]-1<<endl;
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie();cin>>T;while(T--) solve();
}

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

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

相关文章

Javascript/ES6+/Typescript重点内容篇——手撕(待总结)

前端核心知识点梳理与面试题详解 1. Promise 核心知识点 Promise 是异步编程的解决方案&#xff0c;用于处理异步操作三种状态&#xff1a;pending&#xff08;进行中&#xff09;、fulfilled&#xff08;已成功&#xff09;、rejected&#xff08;已失败&#xff09;状态一旦改…

[自动化Adapt] 父子事件| 冗余过滤 | SQLite | SQLAlchemy | 会话工厂 | Alembic

第五章&#xff1a;事件处理与融合 欢迎回到OpenAdapt探索之旅~ 在第四章&#xff1a;系统配置中&#xff0c;我们掌握了如何定制化系统参数。更早的第一章&#xff1a;录制引擎则展示了系统如何捕获海量原始操作数据。 假设我们需要训练机器人输入"hello"一词。原…

组合期权:跨式策略

文章目录0.简介1.买入跨式组合&#xff08;Long Straddle&#xff09;1.1 适用场景​1.2 合约选择1.3 损益分析1.4 案例示范2.卖出跨式组合&#xff08;Short Straddle&#xff09;2.1 适用场景​2.2 合约选择2.3 损益分析2.4 案例示范3.小结参考文献0.简介 跨式策略是一种交易…

Vue计算属性详解2

可写计算属性 计算属性默认是只读的,但在特殊场景下,我们可以创建"可写"的计算属性,通过同时提供getter和setter实现: <script setup>import { ref, computed } from vueconst firstName = ref(John)const lastName = ref(Doe)const fullName = computed(…

UniStorm 5.3.0 + Unity2022 + URP配置说明

一、前言 以前我用的是UniStorm3.0&#xff0c;主要用在内置管线里面&#xff0c;最近想在URP管线里面使用UniStorm天气系统&#xff0c;于是弄了UniStorm5.3.0的包&#xff0c;在Unity2022.3的URP模式下配置&#xff0c;直接导入package&#xff0c;两次宣告失败。最后看了官方…

力扣经典算法篇-44-组合总和(回溯问题)

1、题干 给你一个无重复元素的整数数组candidates和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。…

矩阵与高斯消元:数学算法在计算机领域的应用

一、概述和基本概念 矩阵&#xff0c;类似于在 C 中我们看到的二维数组。它有两个维度&#xff0c;行和列。下面是一个典型的矩阵&#xff1a; M[12342345445610111213] M \begin{bmatrix} 1 & 2 & 3 & 4 \\ 2 & 3 & 4 & 5 \\ 4 & 4 & 5 &…

【补题】CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!) D. K-good

题意&#xff1a;给一个n&#xff0c;如果能被k个数整除&#xff0c;要求这k个数%k后不相同&#xff0c;问如果可以&#xff0c;任意k是多少&#xff0c;如果不可以输出-1 思路&#xff1a; D. K-good_牛客博客 从来没见过&#xff0c;太诡异了&#xff0c;做题做少了 1.…

LLM推理框架的“权力的游戏”:vLLM之后的群雄逐鹿

既然我们已经深入探讨了本地与云端的两大代表Ollama和vLLM&#xff0c;是时候将视野拓宽&#xff0c;检视一下在高性能推理这片“高手如云”的竞技场中&#xff0c;还有哪些重量级的玩家。vLLM的出现点燃了战火&#xff0c;但远非终点。 欢迎来到LLM推理框架的“后vLLM时代”—…

TDengine IDMP 背后的技术三问:目录、标准与情景

过去十年&#xff0c;#工业 和#物联网 场景经历了快速的#数字化 建设&#xff1a;传感器接入、系统联网、数据上云……数据平台已能轻松承载每秒千万级别的写入&#xff0c;每天几 TB 的存储量。但今天再回头看&#xff0c;这些看似“完成”的系统&#xff0c;实际上只解决了一…

MyBatis基础操作完整指南

文章目录MyBatis简介环境搭建Maven依赖数据库表结构核心配置MyBatis配置文件数据库配置文件实体类基础CRUD操作Mapper接口Mapper XML映射文件工具类测试类动态SQL常用标签高级特性一对一关联映射一对多关联映射分页查询使用注解方式MyBatis简介 MyBatis是Apache的一个开源项目…

go与grpc

目录下载与安装遇到的问题cmd中protoc找不到命令cmd中--go_out: protoc-gen-go: Plugin failed with status code 1.下载与安装 下载protoc&#xff1a; https://github.com/protocolbuffers/protobuf/releases 点击下载相应电脑版本即可&#xff0c;我是windows系统下载了pro…

2025年AI面试重构招聘新生态

当企业面临业务扩张与人才竞争的双重压力&#xff0c;传统招聘模式已难以满足高效、精准、公平的人才筛选需求。尤其在校招季、蓝领用工潮等关键节点&#xff0c;面试官超负荷运转、跨地域协调困难、评估标准模糊等问题频发。AI技术的深度介入正推动招聘行业从“经验驱动”向“…

Rust进阶-part5-trait

Rust进阶[part5]_trait trait概述 在 Rust 中,trait 是一种定义共享行为的方式。它类似于其他语言中的接口,允许我们定义一组方法签名,然后让不同的类型去实现这些方法。通过 trait,我们可以实现多态性,即不同类型可以以统一的方式处理。 普通实现 使用 trait 关键字来…

【人工智能-18】机器学习:决策树、随机森林

上一期【人工智能-17】机器学习&#xff1a;KNN算法、模型选择和调优、朴素贝叶斯分类 文章目录一、决策树1.使用理由2.技术二、随机森林1.使用理由2.原理核心&#xff1a;Bagging 随机特征子集3.优点和缺点一、决策树 决策树是一种监督学习算法&#xff0c;主要用于分类&…

RFID高频读写器在工业生产线的使用优势

在工业4.0浪潮下&#xff0c;智能制造对生产效率与精准度的要求日益提升。RFID技术凭借其独特的技术优势&#xff0c;成为工业场景中实现数据实时采集与流程优化的关键工具。本文主要从RFID高频读写器出发&#xff0c;系统解析其在工业生产线中的使用优势。RFID高频读写器一、技…

大模型学习笔记

prompt 提示词的构成&#xff1a; 指示&#xff1a;描述让它做什么上下文&#xff1a;给出与任务相关的背景信息输入&#xff1a; 任务的输入信息输出&#xff1a;输出的格式 生成与检索 生成&#xff1a; 优点&#xff1a;内容的多样性、创造性缺点&#xff1a;存在不可控制 检…

龙虎榜——20250806

上证指数继续收阳线&#xff0c;创新高的概率较大&#xff0c;个股上涨多于下跌&#xff0c;但板块轮动较明显&#xff0c;高位板块注意风险。深证指数较昨天放量收阳线&#xff0c;站上5日和10日均线继续上线&#xff0c;大科技方向资金关注更多。2025年8月6日龙虎榜行业方向分…

数据可视化发展历程

数据可视化是数据描述的图形表示&#xff0c;是当今数据分析发展最快速、最引人注目的领域之一。借助于可视化工具的发展&#xff0c;或朴实&#xff0c;或优雅&#xff0c;或绚烂的可视化作品给我们讲述着各种数据故事。在这个领域中&#xff0c;科学、技术和艺术完美地结合在…

深入理解C++中的stack、queue和priority_queue

目录 前言 1. stack&#xff08;栈&#xff09; 1.1 基本概念 1.2 常用接口 1.3 应用示例&#xff1a;最小栈 1.4 模拟实现 2. queue&#xff08;队列&#xff09; 2.1 基本概念 2.2 常用接口 2.3 模拟实现 3. priority_queue&#xff08;优先队列&#xff09; 3.1…