题解:P9176 [COCI2022-2023#4] Vrsta

什么是线段树,超详细讲解

思路

考虑以每个身高作为下标,维护每个身高的数量,很显然不同的身高最多有 2 × 1 0 5 2\times 10^5 2×105 个,考虑离散化,代码如下:

for (int i = 1; i <= n; i ++) {int x = a[i].v;a[i].v = lower_bound(b + 1, b + idx + 1, a[i].v) - b; // 二分查找该元素的位置,保存离散化vis[a[i].v] = x;
}

用线段树维护每种身高数量的和,线段树上二分即可,具体细节看代码。

细节

  • 考虑到要求的是身高,直接记录一下身高 x x x 离散化前的数字即可(这一步建议大家使用 S T L STL STL lower_bound,不然很容易错)。
  • 在线段树叶子结点记录下当前节点代表的身高是多少。

代码(重点是注释)

#include <bits/stdc++.h> // 包含所有标准库#define int long long // 使用宏定义将int重新定义为长整型,以支持大数操作
#define ls (x<<1) // 定义左子树的宏,表示节点x的左子节点索引
#define rs (x<<1|1) // 定义右子树的宏,表示节点x的右子节点索引
#define mid ((l+r)>>1) // 定义区间中点的宏,用于分割区间using namespace std;
const int N = 2e5 + 5; // 定义常量N为200005,表示数组最大长度// 定义结构体node,用于存储每个元素的值v,权重a和原始索引id
struct node {int v, a, id;
} a[N];int ans[N], b[N], tot; // 定义答案数组ans,去重后的值数组b,以及总数tot
int vis[N]; // 定义访问数组vis,用于记录每个值的原始值
int tr[N << 2], cnt[N << 2]; // 定义线段树数组tr和计数数组cnt// build函数用于构建线段树,初始化计数数组cnt
void build(int x, int l, int r) {if (l == r) {cnt[x] = l;return;}build(ls, l, mid);build(rs, mid + 1, r);
}// change函数用于更新线段树中的元素,将位置k的元素值增加v
void change(int x, int l, int r, int k, int v) {if (l == r) {tr[x] += v;return;}if (k <= mid) change(ls, l, mid, k, v);else change(rs, mid + 1, r, k, v);tr[x] = tr[ls] + tr[rs];
}// query函数用于查询当前线段树中的中位数对应的元素
int query(int x, int l, int r, int k) {if (l == r) {return vis[cnt[x]];}if (tr[ls] < k) return query(rs, mid + 1, r, k - tr[ls]);else return query(ls, l, mid, k);
}// main函数是程序的入口
signed main() {cin >> n; // 输入元素个数nfor (int i = 1; i <= n; i++) {int tmp1, tmp2;cin >> tmp1 >> tmp2; // 输入每个元素的值和权重a[i] = (node){tmp1, tmp2, i}; // 存储到结构体数组a中b[++tot] = a[i].v; // 将值存储到数组b中,用于去重和排序}// 对b数组进行排序和去重,得到唯一元素的有序数组sort(b + 1, b + tot + 1);int idx = unique(b + 1, b + tot + 1) - b - 1;// 更新a数组中的值v为其在去重后数组中的索引,并在vis数组中记录原始值for (int i = 1; i <= n; i++) {int x = a[i].v;a[i].v = lower_bound(b + 1, b + idx + 1, a[i].v) - b; // 二分查询并离散化,为后续找中位数做铺垫vis[a[i].v] = x;}// 构建线段树build(1, 1, n);int res = 0;// 遍历每个元素,更新线段树,并查询当前中位数对应的元素for (int i = 1; i <= n; i++) {change(1, 1, n, a[i].v, a[i].a);res += a[i].a;cout << query(1, 1, n, res / 2 + res % 2) << "\n"; // 输出查询结果}return 0;
}

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

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

相关文章

测试用例的设计(2)

目录 1.前言 2.正交排列(正交表) 2.1什么是正交表 2.2正交表的例子 2.3正交表的两个重要性质 3.如何构造一个正交表 3.1下载工具 3.1构造前提 4.场景设计法 5.错误猜测法 1.前言 我们在前面的文章里讲了测试用例的几种设计方法,分别是等价类发,把测试例子划分成不同的类…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)上篇

提供具有网页显示能力的Web组件&#xff0c;ohos.web.webview提供web控制能力。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。示例效果请以真机运行为准&#xff0c;当前IDE预览器不支持。 需要权…

Java项目:基于springboot实现的OA协同办公系统(源码+数据库+毕业论文)

一、项目简介 本项目是一套基于Springbootvue实现的付费自习室系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型2

目录 1.模块的总体结构 1.1从工作空间导入输入信号 1.2FIR滤波器 2.Subsystem 3.MATLAB Function 文章灵感来源于MATLAB官方免费教程&#xff1a;HDL Coder Self-Guided Tutorial 考虑到MATLAB官网的英文看着慢&#xff0c;再加上视频讲解老印浓浓的咖喱味&#xff0c;我…

【CSP】2021-12-2 序列查询新解 分段处理 用乘法代替加法减少时间复杂度(思想是离散化)

2021-12-2 序列查询新解 分段处理 用乘法代替加法减少时间复杂度&#xff08;思想是离散化&#xff09;2021-12-2 序列查询新解 分段处理 用乘法代替加法减少时间复杂度&#xff08;思想是离散化&#xff09; 2021-12-2 序列查询新解 分段处理 用乘法代替加法减少时间复杂度&am…

python面向对象练习一

假设我们正在开发一个学生管理系统&#xff0c;我们需要创建一个Student类来表示学生对象。 每个学生都有学号、姓名和年龄属性。我们还希望能够打印学生的信息&#xff0c;并在删除学生对象时输出一条提示消息。 要求使用__str__()管理学生信息的打印 要求使用__del__()管理删…

PTA L1-043 阅览室(C++)

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时&#xff0c;管理员输入书号并按下S键&#xff0c;程序开始计时&#xff1b;当读者还书时&#xff0c;管理员输入书号并按下E键&#xff0c;程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时…

代码随想录算法训练营第39天—动态规划07 | ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; https://programmercarl.com/0070.%E7%88%AC%E6%A5%BC%E6%A2%AF%E5%AE%8C%E5%85%A8%E8%83%8C%E5%8C%85%E7%89%88%E6%9C%AC.html 考点 完全背包 我的思路 本题就是用完全背包的思路解决排列问题&#xff0c;一个背包、多个物品&#…

echarts绘制柱状图

<template><div><div>【大区数据信息】</div><div ref"target" class"w-full h-full" ></div></div> </template><script setup> import { ref, onMounted, watch} from "vue"; import *…

RC522刷卡电路设计及程序

一、RC522刷卡电路组成 基于RC522的刷卡电路如上图所示。该电路组成主要分为三部分&#xff1a; Receiving Circuit&#xff1a;接收电路&#xff0c;接收卡发送的数据。 Filtering Impedence-Transtorm circuit:滤波和阻抗变换电路&#xff0c;抑制高次谐波并优化到读卡器天线…

手把手写深度学习(23):视频扩散模型之Video DataLoader

手把手写深度学习(0)&#xff1a;专栏文章导航 前言&#xff1a;训练自己的视频扩散模型的第一步就是准备数据集&#xff0c;而且这个数据集是text-video或者image-video的多模态数据集&#xff0c;这篇博客手把手教读者如何写一个这样扩散模型的的Video DataLoader。 目录 准…

【Vue3】深入理解Vue3路由器的工作原理to的两种写法

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

推荐一个非常好用的表格组件 - AG Grid

一、前言 最近在做一个线上订货平台的项目&#xff0c;用户之前都是使用传统的Excel表格完成工作数据的提交和汇总&#xff0c;工作效率非常低。 希望我们能将历年的各项数据导入系统&#xff0c;之后可以参照历年数据格式&#xff0c;能直接在系统上创建新的工作&#xff0c…

Realsense 相机SDK学习(一)——librealsense使用方法及bug解决(不使用Ros)

一.介绍 realsense相机是一个intel开发出来的一款深度相机&#xff0c;我之前使用他来跑过slam&#xff0c;也配置过他的驱动&#xff0c;在此附上realsense的相机驱动安装方法&#xff1a;Ubuntu20.04安装Intelrealsense相机驱动&#xff08;涉及Linux内核降级&#xff09; …

c# 的ref 和out

在C#中&#xff0c;ref和out是用于方法参数的关键字&#xff0c;它们都允许在方法调用中对参数进行修改。 ref关键字用于传递参数的引用。当使用ref关键字声明一个参数时&#xff0c;实际上是在告诉编译器此参数在调用方法之前必须被赋值。ref参数传递的是参数的引用地址&…

【四】【算法分析与设计】贪心算法的初见

455. 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有…

AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀【文末送书-38】

文章目录 Python驱动的金融智能&#xff1a;数据分析、交易策略与风险管理Python在金融数据分析中的应用 实战案例&#xff1a;基于ChatGPT的金融事件预测AI时代Python金融大数据分析实战&#xff1a;ChatGPT让金融大数据分析插上翅膀【文末送书-38】 Python驱动的金融智能&…

eVTOL适航领先新构型,沃飞长空布局空中交通新局面

汽车、火车、飞机……人类对于出行方式的探索从未停止。随着沃飞长空旗下首款自研eVTOL(飞行汽车)AE200适航技术验证机一阶段顺利试飞,eVTOL(飞行汽车)这种面向空中交通的新型交通工具进入了我们的视野,那么eVTOL(飞行汽车)是什么?eVTOL(飞行汽车)前景怎么样? eVTOL(飞行汽车…

Power Apps 学习笔记 -- Action

文章目录 1. Action 简介2. Action 配置3. 待补充 1. Action 简介 Action基础教程 : Action概述 操作Action: 1. 操作Action类似于工作流Workflow&#xff0c;提供一些重用性的操作&#xff0c;允许工作流或其他Web服务端点调用(例如javascript). 2. Action 类似于c#当中的一个…

vue3路由跳转时,页面如何滚动到顶部

在Vue中使用路由进行页面切换后&#xff0c;我们可以通过设置scrollBehavior来控制页面的滚动位置。 import Vue from vue import Router from vue-router// 导入组件 import HomePage from ./components/HomePage.vue import AboutPage from ./components/AboutPage.vueVue.u…