C. Increasing by Modulo(贪心 + 二分)

news2024/11/17 23:39:22

Problem - C - Codeforces

Toad Zitz有一个整数数组,每个整数都在0到m-1的范围内。这些整数是a1,a2...an。
在一次操作中,,iz可以选择一个整数k和k个萦引1..k,使得1si i2. ..fiksn。然后他应该将每个选定的整数a刘j 更改为(aj+ 1lmodm)。整数m对于所有操作和索引都是固定的。
这里xmody表示x除以y的余数。
zitz希望用最少的操作使其数组非降序列。找到这个最小操作数量。
输入:
第一行包含两个整数n和m ( 1sn,m≤300000)——数组中的整数数量和参数m。下一行包含n个空格分隔的整数a1,a2.....an (Osai<m)——给定的数组。
输出:
输出一个整数:Zit-需要进行上述操作的最小次数,使其数组成为非降序列。如果不需要任何操作,则输出О。很容易看出,通过足够的操作,Ztz总是可以使其数组成为非降序列。

Examples

input

Copy

5 3
0 0 0 1 2

output

Copy

0

input

Copy

5 7
0 6 1 3 2

output

Copy

1


在第一个例子中,数组已经是不递减的,所以答案是0。
在第二个例子中,您可以选择k=2,i=2,i=5,aray变成[0,1,3,3,ltis不减,所以答案是1。
题解:
贪心的想,如果想让操作数尽可能小,那么最大值是不是也要,尽可能小,我们check操作数,

check时,

1.如果ai > pre

如果ai + x >= m并且(ai + x)%m >=pre

说明,当前ai不用为最大,因为它可以,加上变成跟小的pre

否则pre = a[i]

2.如果ai < pre

如果ai + x < pre

说明我们最优的最小值,ai都无法达到,return 0

#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 a[1000050];
int n,m;
int b[1000040];
int check(int x)
{
	int pre = 0;
	for(int i = 1;i <= n;i++)
	{
		if(a[i] > pre)
		{
			if(a[i] + x >= m&&(a[i] + x)%m >= pre)
			{
				
			}
			else
			{
				pre = a[i];
			} 
		}
		else
		{
			if(a[i] + x >= pre)
			{
				
			}
			else
			{
				return 0;
			}
		}
	}
	return 1;
} 
void solve()
{
	cin >> n >> m;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
	}
	int l = 0,r = m;
	while(l <= r)
	{
		int mid = (l + r)/2;
		if(check(mid))
		{
			r = mid - 1;
		}
		else
		{
			l = mid + 1;
		}
	}
	cout <<l;
}
//4 2 4

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/463438.html

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

相关文章

初识STL

长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西&#xff0c;以及一种得以制造出”可重复运用的东西”的方法&#xff0c;从函数(functions)&#xff0c;类别(classes),函数库(function libraries),类别库(class libraries)、各种组件&#xff0c;从模块化设计&am…

(C语言版)力扣(LeetCode)27.移除元素三种解法分析

移除元素 题目第一种解法&#xff1a;有效值前移第二种解法&#xff1a;双指针第三种解法&#xff1a;双指针优化结语 题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空…

【C++】vector OJ练习

文章目录 1. 只出现一次的数字思路讲解AC代码 2. 杨辉三角思路讲解AC代码 3. 只出现一次的数字 III思路讲解AC代码 4. 只出现一次的数字 II思路讲解AC代码 5. 删除有序数组中的重复项思路讲解AC代码 6. 数组中出现次数超过一半的数字思路讲解AC代码 这篇文章我们来做几道vector…

Jenkins学习笔记

Jenkins学习笔记 1、基本概念 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 2、安装 文件包&#xff1a;https://pan.…

半监督目标检测

有监督目标检测&#xff1a; 拥有大规模带标签的数据&#xff0c;包括完整的实例级别的标注&#xff0c;即包含坐标和类别信息&#xff1b;弱监督目标检测&#xff1a; 数据集中的标注仅包含类别信息&#xff0c;不包含坐标信息&#xff0c;如图一 b 所示&#xff1b;弱半监督目…

RHCE-防火墙

目录 一、防火墙介绍 1.1、什么是防火墙 1.2、防火墙的功能&#xff1a; 1.3、linux防火墙的架构 二、iptables 2.1iptables介绍 2.2名词术语&#xff1a; 什么是容器&#xff1f; 什么是Netfilter/Iptables&#xff1f; 什么是表&#xff08;tables&#xff09;&#x…

学历到底是敲门砖还是枷锁?—探讨“孔乙己文学”热搜背后的教育话题

序言 最近&#xff0c;“孔乙己文学”一度成为网络热门话题&#xff0c;引起了不少人的讨论。其中&#xff0c;一句“学历不仅是敲门砖&#xff0c;也是我下不来的高台&#xff0c;更是孔乙己脱不下的长衫”引发了广泛共鸣&#xff0c;让人深思。 敲门砖 or 枷锁&#xff1f; 对…

黑盒测试过程中【测试方法】详解4-因果图

在黑盒测试过程中&#xff0c;有9种常用的方法&#xff1a;1.等价类划分 2.边界值分析 3.判定表法 4.正交实验法 5.流程图分析 6.因果图法 7.输入域覆盖法 8.输出域覆盖法 9.猜错法 黑盒测试过程中【测试方法】讲解1-等价类&#xff0c;边界值&#xff0c;判定表_朝一…

大模型竞争加剧,国内外 AI 监管进一步升级

随着人工智能技术的不断发展&#xff0c;大模型已成为当下最热门的话题之一。不仅国内外的科技公司都在积极投入研发&#xff0c;各国政府也在加大监管力度&#xff0c;以确保人工智能技术的安全和可持续发展。本文将从三个层次分别探讨大模型的定义和热度、国内外AI监管的现状…

【STM32】基础知识 第八课 MDK 工程

【STM32】基础知识 第八课 MDK 工程 准备工作新建寄存器版本 MDK 工程步骤新建工程文件夹添加文件魔术棒设置绝对路径和相对路径对比测试程序 新建 HAL 库版本 MDK 工程CMSISHAL 库简介DriversMiddlewaresDevice 和 Include HAL 库文件介绍HAL 库 API 函数和比那辆命名规则HAL …

Fedora 38 正式发布

Fedora Linux 38 正式发布&#xff0c;用户可以访问官网下载安装最新版本。 新网站 如果你点击了上面的官网链接&#xff0c;你应该会注意到 Fedora 的官网看起来与之前有了很大不同。这是 Fedora Websites & Apps 团队与 Design & Infrastructure 团队以及广大社区合作…

HCIA-RS实验-ENSP搭建一个基础的IP网络

HCIA-RS是华为认证网络工程师&#xff08;Routing & Switching&#xff09;的缩写。通过考取HCIA-RS证书&#xff0c;可以证明自己有能力设计、实现和维护小型网络。而HCIA-RS实验则是考试的一部分&#xff0c;是考生必须要完成的实践环节。这将是第一篇文章&#xff0c;后…

Qt连接MySQL数据库最详细的教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.直接通过MySQL的驱动加载数据库1&#xff09;所需代码2&#xff09;解决QMYSQL driver not loaded 2.通过ODBC连接MySQL数据库&#xff11;&#xff09;官方解释2…

如何react中使用redux和react-redux

Redux Redux 是 JavaScript 状态容器&#xff0c;提供可预测化的状态管理。 可以让你构建一致化的应用&#xff0c;运行于不同的环境&#xff08;客户端、服务器、原生应用&#xff09;&#xff0c;并且易于测试。 不仅于此&#xff0c;它还提供 超爽的开发体验&#xff0c;比…

指针可以这样认知

注&#xff1a;此篇文章仅限初步了解&#xff0c;本小白后续会持续进行详解指针的相关操作。 目录&#xff1a; 认知内存一个内存单元的大小地址的产生 理解指针用途 指针变量的大小&#x1f49e;结尾 了解指针为什么需要了解内存呢&#xff1f; 因为指针是用来管理内存&#x…

【k8s】ruoyi微服务迁移到k8s

书接上回【传统方式部署Ruoyi微服务】&#xff0c;此刻要迁移至k8s。 环境说明 31 master &#xff0c; 32 node1 &#xff0c; 33 node2迁移思路 交付思路: 其实和交付到Linux主机上是一样的&#xff0c;无外乎将这些微服务都做成了Docker镜像; 1、微服务数据层: MySQL、 R…

聊聊 IP packet 的 TTL 与 tcp segment 的 MSL

聊聊 IP packet 的 TTL 与 tcp segment 的 MSL 1 前言 - 网络知识的重要性 近几年在排查解决应用系统在客户现场遇到的复杂问题时&#xff0c;越来越觉得除了扎实的LINUX操作系统知识&#xff0c;对TCP/IP网络知识的深入理解也是至关重要的。 有鉴于此&#xff0c;后续笔者会…

排序算法---插入排序

插入排序是一种简单的排序算法&#xff0c;一般又称为直接插入排序。插入排序的思想与选择排序有些相似&#xff0c;即在原数组上将数组分为两个部分&#xff1a;已排列好的有序数组和待排列数组&#xff0c;选择排序强调的是“选择”&#xff0c;而插入排序强调的是”插入“&a…

【Excel统计分析插件】上海道宁为您提供统计分析、数据可视化和建模软件——Analyse-it

Analyse-it是Microsoft Excel中的 统计分析插件 它为Microsoft Excel带来了 易于使用的统计软件 Analyse-it在软件中 引入了一些新的创新统计分析 Analyse-it与 许多Excel加载项开发人员不同 使用完善的软件开发和QA实践 包括单元/集成/系统测试 敏捷开发、代码审查 …

【JavaScript面向对象】

JavaScript面向对象 1 本节目标2 面向对象编程介绍2.1 两大编程思想2.2 面向过程编程POP2.3 面向对象编程OOP2.4 面向过程和面向对象的对比 3 ES6中的类和对象3.1 对象3.2 类class3.3 创建类3.4 类constructor构造函数3.5 类添加方法3.6 三个注意点 4 类的继承4.1 继承4.2 supe…