D. Odd-Even Subsequence(二分 + 奇偶下标的取法)

news2024/10/1 5:26:50

Problem - D - Codeforces

Ashish有一个大小为n的数组a。A的子序列被定义为一个序列,该序列可以通过删除一些元素(可能是不删除)从A中获得,而不改变剩余元素的顺序。考虑a的子序列s。他将s的代价定义为以下两者之间的最小值:在s的奇数指数下所有元素中的最大值。在s的偶数下标处的所有元素中的最大值。注意,元素的索引是它在s中的索引,而不是它在a中的索引。位置从1开始编号。因此,s的代价等于min(maz(s1, S3, 85,…),max(82, S4, S6,…))。例如,{7,5,6)的代价是min(max(7,6), max(5)) = min(7,5) = 5。帮助他找到大小为k的子序列的最小代价。输入第一行包含两个整数n和k (2 < k < n < 2- 105)——数组a的大小和子序列的大小。下一行包含n个整数a1, a2, .., an(1≤a;≤10°)-数组a的元素。输出输出一个整数-大小为k的子序列的最小代价。

Examples

input

Copy

4 2
1 2 3 4

output

Copy

1

input

Copy

4 3
1 2 3 4

output

Copy

2

input

Copy

5 3
5 3 4 2 6

output

Copy

2

input

Copy

6 4
5 3 50 2 4 5

output

Copy

3

请注意在第一个测试中,考虑子序列s ={1,3}。这里代价等于min(max(1), maz(3)) = 1。在第二个测试中,考虑子序列s ={1,2,4)。这里代价等于min(maz(1,4), maz(2)) = 2。在第四个测试中,考虑子序列s ={3,50,2,4}。这里代价等于min(maz(3,2), maz(50,4)) = 3。

题解:
我们只需要求奇数下标值和,和偶数下标之和最小的即可

对于奇数下标的取值范围

如果n%2 == 1

奇:可以取1 ~ n,注意每取一个都要至少隔一个再取,并且要取够(k+1)/2

偶:可以取2~n - 1,取够k/2

如果n%2 == 0

奇:取1~n-1,取够k/2

偶:取2~n,取够k/2

那现在我们就可以二分了,分情况讨论

看所给区间是否可以取够<mid

可以取够说明,值可以更小

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
#define int long long
int n,k;
int a[200050];
int check(int l,int r,int x,int w)
{
	int cnt = 0;
	for(int i = l;i <= r;i++)
	{
		if(a[i] < x)
		{
			cnt++;
			i++;
		}
	}
	return cnt >= w;
}
int erfen(int L,int R,int w)
{
	int l = 1,r = 1e9;
	while(l <= r)
	{
		int mid = (l + r)/2;
		if(check(L,R,mid,w))
		{
			r = mid - 1;
		}
		else
		{
			l = mid + 1;
		}
	}
	return l - 1;
}
void solve()
{
	cin >> n >> k;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
	}
	int x = (k + 1)/2;
	int y = k/2;
	int ans = 0;
	if(x == y)
	{
		ans = min(erfen(1,n - 1,x),erfen(2,n,x));
	}
	else
	{
		ans = min(erfen(1,n,x),erfen(2,n - 1,y));
	}
	cout << ans ;
}


signed main()
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	int t = 1;
//	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

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

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

相关文章

SAR ADC系列27:实践讲解1

Latch比较器Noise仿真 比较器后面加RS触发器&#xff0c;当比较器复位时&#xff0c;OUTP和OUTN输出为11&#xff0c;RS触发器锁存&#xff1b;当比较器比较时&#xff0c;OUTP和OUTN输出一正一负&#xff0c;RS触发器相当于反相器。 做法&#xff1a;改变Vin的值&#xff0c;…

SAM(Segment Anything Model)让CV走到尽头?学CV的研究生还能正常毕业吗?怎么使用SAM?

SAM&#xff08;Segment Anything Model&#xff09;让CV走到尽头&#xff1f;学CV的研究生还能正常毕业吗&#xff1f;怎么使用SAM&#xff1f; 1. 引言 最近无论是在B站、知乎还是论坛、微博&#xff0c;都看了一些有关SAM的讨论。这个号称“CV界ChatGPT”的模型从出生起就…

x86中断基础

x86中断基础 原文&#xff1a;Basic x86 interrupts 作者&#xff1a;Alex Dzyoba 原文发表日期&#xff1a;2016年4月2日 在我的关于多重引导内核的文章中&#xff0c;我们看到了如何加载内核、打印文本&#xff0c;然后停止。然而要让操作系统可用&#xff0c;需要支持键…

[chapter 26][PyTorch][MNIST 测试实战】

前言 这里面结合手写数字识别的例子&#xff0c;讲解一下训练时候注意点 目录 训练问题解决方案参考代码一 训练问题 训练的时候,我们的数据集分为Train Data 和 validation Data。 随着训练的epoch次数增加&#xff0c;我们发现Train Data 上精度 先逐步增加&#xff0c;但…

协议篇之以太网ARP协议

协议篇之以太网ARP协议一、什么是ARP协议&#xff1f;作用是什么&#xff1f;二、ARP请求与ARP应答三、以太网ARP数据报格式四、总结一、什么是ARP协议&#xff1f;作用是什么&#xff1f; ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;地址解析协议&am…

GUID分区与MBR分区有什么区别? 操作系统知识

GUID分区与MBR分区有什么区别&#xff1f; 操作系统知识 1、MBR分区表类型的磁盘 主引导记录&#xff08;Master Boot Record&#xff0c;缩写&#xff1a;MBR&#xff09;&#xff0c;又叫做主引导扇区&#xff0c;它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要…

以ChatGPT为例进行自然语言处理学习——入门自然语言处理

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

Python办公自动化之PostgreSQL篇2——利用Python连接PostgreSQL并读取一张表

在上一篇我们已经安装好了最新的PostgreSQL&#xff0c;以及最方便的可视化工具&#xff0c;Navicat 如果错过的小伙伴&#xff0c;可以去上一篇查看&#xff1a;点我查看 今天我们来用Python连接一下PostgreSQL&#xff0c;然后准备一张测试表&#xff0c;导入PostgreSQL&am…

elasticsearch 拼音分词器 自动补全。

elasticsearch 拼音分词器 & 自动补全。 文章目录elasticsearch 拼音分词器 & 自动补全。2. 自动补全。2.1. 拼音分词器。2.2. 自定义分词器。2.3. 自动补全查询。2.4. 实现酒店搜索框自动补全。2.4.1. 修改酒店映射结构。2.4.2. 修改 HotelDoc 实体。2.4.3. 重新导入。…

Shader Graph10-Min, Max, Clamp, Saturate节点

打开UE&#xff0c;新建Material叫做DemoMinMaxClamp&#xff0c;双击打开 一、Minimum节点&#xff0c;两个值比较取较小的。 Min的含义是&#xff0c;红框的0.5为参数B的值&#xff0c;1.0为白色圆形的值&#xff0c;下面的0.5为背景颜色值。图片中每个像素值与0.5进行比较&a…

java基于mvc的停车收费系统mysql

系统需要解决的主要问题有&#xff1a; (1)车位管理模块 添加车位、查看车位状态、车位信息查询等。 (2)客户信息管理模块 客户基本信息录入、客户信息查询等。 (3)卡业务办理 添加卡信息、查余额查询、卡充值。 (4)车辆信息管理模块 车牌信息录入等。 (5)收费管理 可以调整相应…

【Java 数据结构】集合类 (精华篇)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

一本通 3.4.3 图的连通性

1383&#xff1a;刻录光盘(cdrom) 【题目描述】 在FJOI2010夏令营快要结束的时候&#xff0c;很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家&#xff0c;以便大家回去后继续学习。组委会觉得这个主意不错&#xff01;可是组委会一时没有足够的空光盘&#xff…

数学术语——指数的发展历程

指数的发展历程 指数(exponents)的历史可以追溯到许多世纪以前&#xff0c;欧几里德(Euclid)被认为是第一个已知的指数用法。他用“幂(power)”这个词来表示我们今天所知的一个数自乘的次数(注&#xff1a;底数连同其右上角的指数一起的整体形式称为“幂”)。古希腊数学家使用…

寄存器:计算机中的小而强大的存储器件

目录 什么是寄存器&#xff1f; 寄存器的作用 提高计算机的性能 存储处理器需要快速访问的数据 存储函数调用时的参数和返回值 存储中间计算结果 寄存器的种类 程序计数器 指令寄存器 状态寄存器 通用寄存器 寄存器的进化过程 寄存器&#xff1a;计算机中的小而强大…

Linux操作基础(文件系统和日志分析)

文章目录一、inode与block1.1inode和block概述1.2 inode包含文件的元信息1.3 linux文件系统的三个时间戳1.4 inode的号码1.5 inode的大小1.6 inode号的特点1.7软连接与硬链接二 、文件恢复2.1 xfsdump恢复2.2 opic恢复方式三 、日志文件3.1 日志文件的分类3.2 日志的格式3.3 常…

大数据分析案例-基于决策树算法构建信用卡违约预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

定制你的专属大模型 Finetuner+体验开启!

如 ChatGPT、GPT4 这样的大型语言模型就像是你为公司请的一个牛人顾问&#xff0c;他在 OpenAI、Google 等大公司被预训练了不少的行业内专业知识&#xff0c;所以加入你的公司后&#xff0c;你只需要输入 Prompt 给他&#xff0c; 介绍一些业务上的背景知识&#xff0c;他就能…

Flink学习:Flink如何打印窗口的开始时间和结束时间

Window一、简介二、代码实现三、测试一、简介 大家知道,Flink用水位线和窗口机制配合来处理乱序事件,保证窗口计算数据的正确性,当水位线超过窗口结束时间的时候,就会触发窗口计算 水位线是动态生成的,根据进入窗口的最大事件时间-允许延迟时间 那么窗口的开始时间和结束时间…

力扣70爬楼梯:思路分析+优化思路+代码实现+补充思考

文章目录第一部分&#xff1a;题目描述第二部分&#xff1a;思路分析2.1 初步分析2.2 问题描述2.3 优化思路第三部分&#xff1a;代码实现第四部分&#xff1a;补充思考第一部分&#xff1a;题目描述 &#x1f3e0; 链接&#xff1a;70. 爬楼梯 - 力扣&#xff08;LeetCode&am…