当前位置: 首页 > news >正文

【每日一题】【平衡树】【__gnu_pbds :: tree】小红的中位数 牛客周赛 Round 29 D题 C++

牛客周赛 Round 29 D题

小红的中位数

题目背景

牛客周赛 Round 29

题目描述

???

样例 #1

样例输入 #1

4
2 5 8 1

样例输出 #1

5.0
2.0
2.0
5.0

样例 #2

样例输入 #2

3
1 2 3

样例输出 #2

2.5
2.0
1.5

做题思路

本题提供Policy-Based Data Structures中的平衡树做法。

详细信息请见:平衡树

通过描述 : 如果想要存储多个相同的 Key 元素,则需要使用类似于 std::pair 和 struct 的方法

所以 Key 可以使用 std::pair

使用从小到大的默认排序,和红黑树为底层数据结构类型(最优)。

更新节点的策略的选择:因为要用find_by_order 方法,需要使用 tree_order_statistics_node_update。

如果是原本是奇数个数的数组,去掉一个后为偶数,找到中间两个数字即可得到中位数。
反之是奇数,找到最中间的数字(中位数)。

find_by_order(x):返回 Cmp_Fn 比较的排名所对应元素的迭代器。

利用find_by_order(n/2)即可找到中间位置的数字

trr.erase({a[i],i}); // 取出第i个数字
printf("%.1f\n",((n&1)  ? ((double)trr.find_by_order(m)->first + (double)trr.find_by_order(m-1)->first)/2.0 : (double)trr.find_by_order(m-1)->first )); //获取目前数组的中位数
trr.insert({a[i],i});//再把第i个数字放入

代码

#include <iostream>
#include <algorithm>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>#define int long long
#define For(a,b) for(int i = (a) ; i<= (b) ; i++)
using namespace  std;const int N = 2e7+10;__gnu_pbds ::tree<pair<int, int>, __gnu_pbds::null_type, less<pair<int, int> >,__gnu_pbds::rb_tree_tag,__gnu_pbds::tree_order_statistics_node_update>trr;
int n , m;
int a[N];
void solve(){cin >> n;For(0,n-1){cin >> a[i];trr.insert({a[i],i});}m = n/2;for(int i=0;i<n;i++){trr.erase({a[i],i});printf("%.1f\n",((n&1)  ? ((double)trr.find_by_order(m)->first + (double)trr.find_by_order(m-1)->first)/2.0 : (double)trr.find_by_order(m-1)->first ));trr.insert({a[i],i});}
}
signed main(){int _=1;//cin >> _;while(_--)solve();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Rust: Web框架Axum和Rest Client协同测试
  • 常见概念 -- 非线性效应
  • FPGA随记——8B/10B编码
  • 倍福——ADS协议解析及C语言读写库
  • 2024年6月第2套英语四级真题PDF
  • 第二章 深信服超融合测试历程第二天
  • 【计算机视觉前沿研究 热点 顶会】ECCV 2024中Mamba有关的论文
  • macOS系统介绍与特点
  • Oracle(106)如何实现透明数据加密?
  • 93. UE5 GAS RPG 应用负面效果表现
  • 批处理常用指令与脚本的例子
  • web渗透:SSRF漏洞
  • 海康二次开发学习笔记7-流程相关操作
  • 深度学习——基于MTCNN算法实现人脸侦测
  • 实现A-Z滑动检索菜单
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【技术性】Search知识
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Hexo+码云+git快速搭建免费的静态Blog
  • java8-模拟hadoop
  • Java方法详解
  • LintCode 31. partitionArray 数组划分
  • mongodb--安装和初步使用教程
  • Spring Cloud Feign的两种使用姿势
  • Vue小说阅读器(仿追书神器)
  • 给初学者:JavaScript 中数组操作注意点
  • 马上搞懂 GeoJSON
  • 目录与文件属性:编写ls
  • 前言-如何学习区块链
  • 区块链分支循环
  • 使用 QuickBI 搭建酷炫可视化分析
  • 【干货分享】dos命令大全
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #define用法
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (11)MSP430F5529 定时器B
  • (20050108)又读《平凡的世界》
  • (vue)页面文件上传获取:action地址
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (新)网络工程师考点串讲与真题详解
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转)四层和七层负载均衡的区别
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET DataGridView数据绑定说明
  • .net 流——流的类型体系简单介绍
  • .NET简谈设计模式之(单件模式)
  • @Transactional类内部访问失效原因详解
  • []sim300 GPRS数据收发程序