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

c++题目_P1168 中位数

# 中位数

## 题目描述

给定一个长度为 $N$ 的非负整数序列 $A$,对于前奇数项求中位数。

## 输入格式

第一行一个正整数 $N$。

第二行 $N$ 个正整数 $A_{1\dots N}$。

## 输出格式

共 $\lfloor \frac{N + 1}2\rfloor$ 行,第 $i$ 行为 $A_{1\dots 2i - 1}$ 的中位数。

## 样例 #1

### 样例输入 #1

```
7
1 3 5 7 9 11 6
```

### 样例输出 #1

```
1
3
5
6
```

## 样例 #2

### 样例输入 #2

```
7
3 1 5 9 8 7 6
```

### 样例输出 #2

```
3
3
5
6
```

## 提示

对于 $20\%$ 的数据,$N \le 100$;

对于 $40\%$ 的数据,$N \le 3000$;

对于 $100\%$ 的数据,$1 \le N ≤ 100000$,$0 \le A_i \le 10^9$。

看到这一题我第一反应就是——

                                        二分

于是我开始敲代码

0分代码

#include <bits/stdc++.h>  // 包含常用的标准库
using namespace std;  // 使用标准命名空间int main() {int n, a[99999], mx, mn;  // 声明变量 n, a, mx, mncin >> n;  // 从标准输入读取 nfor (int i = 1; i <= n; i++) {cin >> a[i];  // 从标准输入读取数组 a 的元素}for (int i = 1; i <= n; i += 2) {  // 遍历数组 a 的元素sort(a, a + i + 1);  // 对数组 a 进行排序,排序范围是 a[0] 到 a[i]mn = a[1];  // 最小值是排序后的第一个元素mx = a[i];  // 最大值是排序后的第 i 个元素int l = 1, r = i, mid, z = (mn + mx) / 2, ll;  // 声明变量 l, r, mid, z, llwhile (l <= r) {  // 当 l 小于等于 r 时循环mid = (l + r) >> 1;  // 取中间值if (a[mid] > z) {r = mid - 1;  // 如果中间值大于 z,将 r 更新为 mid - 1} else {l = mid + 1;  // 如果中间值小于等于 z,将 l 更新为 mid + 1}}ll = l;  // ll 为小于等于 z 的最大值的下标l = 1;  // 重置 lr = i;  // 重置 rwhile (l <= r) {  // 当 l 小于等于 r 时循环mid = (l + r) >> 1;  // 取中间值if (a[mid] < z) {l = mid + 1;  // 如果中间值小于 z,将 l 更新为 mid + 1} else {r = mid - 1;  // 如果中间值大于等于 z,将 r 更新为 mid - 1}}if (z - a[ll - 1] <= a[ll] - z) {cout << a[ll - 1] << endl;  // 如果 z 与小于等于 z 的最大值的差小于等于大于 z 的最小值与 z 的差,输出小于等于 z 的最大值} else {cout << a[ll] << endl;  // 否则,输出大于 z 的最小值}}return 0;  // 返回 0,表示成功
}

普普通通的二分,不会还有人不会吧!

于是我测了一下第一样例

过了 

提交

 错了

。。。

于是我旷然大悟

修改了我代码

40分代码

#include <bits/stdc++.h>  // 包含常用的标准库
using namespace std;  // 使用标准命名空间int main() {int n, a[99999], mx, mn;  // 声明变量 n, a, mx, mncin >> n;  // 从标准输入读取 nfor (int i = 1; i <= n; i++) {cin >> a[i];  // 从标准输入读取数组 a 的元素}for (int i = 1; i <= n; i += 2) {  // 遍历数组 a 的元素sort(a, a + i + 1);  // 对数组 a 进行排序,排序范围是 a[0] 到 a[i]cout << a[(1 + i) / 2] << endl;  // 输出排序后的数组中位数}return 0;  // 返回 0,表示成功
}

..............................

看下题目数据

...

        记得修改排序的复杂度

        各位自己修改代码吧

        作者脑子欠费了

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 面向对象03:创建对象内存分析
  • Qt第十八章 XML和Json格式解析
  • 理解Flink数据流图
  • Java码农35岁之后只能送外卖?
  • 人工智能初学者学习路线
  • 设计模式-创建型模式-建造者模式
  • 用 Postgres 就好
  • 对于mp4 android可以正常播放 ios和mac safari不能播放问题处理
  • 研究人员利用ChatGPT的强大功能,创建数字病理学AI工具
  • 前端入门:HTML5全攻略
  • Tomcat 优化
  • LWIP相关知识
  • Java常见算法
  • 光储充能源站微电网及其控制综述入门研究笔记
  • 【Qt】输入类控件QDateTimeEdit
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • echarts花样作死的坑
  • If…else
  • JavaScript中的对象个人分享
  • Java比较器对数组,集合排序
  • Netty源码解析1-Buffer
  • spark本地环境的搭建到运行第一个spark程序
  • spring-boot List转Page
  • yii2中session跨域名的问题
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 系统认识JavaScript正则表达式
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • scrapy中间件源码分析及常用中间件大全
  • 回归生活:清理微信公众号
  • ​​​【收录 Hello 算法】9.4 小结
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #1014 : Trie树
  • #预处理和函数的对比以及条件编译
  • (03)光刻——半导体电路的绘制
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (四)进入MySQL 【事务】
  • (图)IntelliTrace Tools 跟踪云端程序
  • (未解决)macOS matplotlib 中文是方框
  • (五)网络优化与超参数选择--九五小庞
  • (一)为什么要选择C++
  • (转)scrum常见工具列表
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ... 是什么 ?... 有什么用处?
  • .bat批处理出现中文乱码的情况
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET Core 中插件式开发实现
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net 代码性能 - (1)
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)