首页 > 其他分享 >国庆day1补题

国庆day1补题

时间:2024-10-29 12:42:44浏览次数:4  
标签:frac min 题解 元素 day1 国庆 补题 序列 单调

国庆day1补题

单调数据结构

单调栈的性质:

1.单调栈里的元素具有单调性

2.元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除

3.使用单调栈可以找到元素向左遍历第一个比他小的元素,也可以找到元素向左遍历第一个比他大的元素,具体的,假设要找到一个元素向前第一个比它大的数,就是维护单调减的单调栈,加入一个数弹到最后时的前面那个数(这个数不再弹出)。向后第一个比它

单调队列相当于另外又维护了一个下标(或别的)可以从开头删除元素

CF280B Maximum XorSecondary

题意:

给出一个长为n的正整数序列。定义一个序列的所有数异或的结果为其最大值和次大值的异或值。求在此序列的所有子串(即要求连续一段区间)中价值最大是多少。

第一行一个整数n(\(1≤n≤10^5\)),表示序列长度。

第二行n个由空格隔开的正整数\(s_i\)((\(1≤s_i≤10^9\))),为序列元素。

输出仅一个整数,即最大异或和。

题解:

不妨枚举所有可能出现的最大值和次大值,由于若以最大值枚举的话难以计算(因为对应一个最大值的话次大值有很多种可能),所以我们枚举次大值,具体的说就是遍历数组 \(a_i\) ,每个数为一个区间次大值时,最大值只可能是前面第一个比这个数大的数或后面第一个比这个数大的数,这样可以进行单调栈。

容易发现把这个数弹出的数就是第一个它大的数。

CF1407D Discrete Centrifugal Jumps

题意:

有 \(n\) 个高楼排成一行,每个楼有一个高度 \(h_i\)。称可以从楼 \(i\) 跳到 楼 \(j\),当 \(i\), \(j\) ( \(i < j\) )满足以下三个条件之一:

  • \(i+1=j\)

  • \(\max(h_{i+1},h_{i+2},\cdots,h_{j-1})<\min(h_i,h_j)\)

  • \(\min(h_{i+1},h_{i+2},\cdots,h_{j-1})>\max(h_i,h_j)\)

现在你在楼 \(1\),请求出跳到楼 \(n\) 最少要跳几次。

\(2 \leq n \leq 3\cdot 10^5\), \(1\leq h_i \leq 10^9\)。

题解:

显然dp,考虑如何转移,第一点显然是 \(dp[j-1]+1\) 对 \(dp[j]\) 有贡献,第二项和第三项本质一样,考虑第二项,意思是中间的所有元素都小于两边的这俩元素,假设目前正在计算\(dp[j]\) ,考虑可以从哪个点来转移,

  • 如果\(h_i\le h_j\),那么说明\(h_j\)是\(h_i\)后第一个比\(h_j\)大或等于的数,这用性质三,用单调递减的单调栈维护即可,每次有弹出的数都是贡献的一部分
  • 对于\(h_i > h_j\),着说明了\(i\)只能取 \(j\)之前第一个比 \(j\)大的位置,同样可以用单调栈来维护

具体来说维护一个单调递减的单调栈,每次弹出去的所有比\(h_j\)小或等于的数计算贡献,如果中间没有弹出等于的数,那么对前一个数也计算贡献(因为如果有等于的数,就无法满足均大于中间的数(注意单调栈中不可能出现两个等的数,因为单调递减))。

[ABC352D] Permutation Subsequence

题意:

给你一个 \(1 \sim N\) 的排列 \(P\)。

长度为 \(K\) 的索引(位置)序列 \((i_1,i_2,\dots,i_K)\) 如果同时满足以下两个条件,则称为好索引序列

  • \(i\) 从 \(1\) 到 \(K\) 单调递增。
  • 子序列 \((P_{i_1},P_{i_2},\ldots,P_{i_K})\) 可以在重新排列后成为 \(K\) 个连续的整数。

求所有好的索引序列中 \(i_K-i_1\) 的最小值。可以证明,好索引序列存在至少一个。

题解:

比较容易,可以先做一个映射,记录\([1,n]\)每个数出现的位置,可以知道我们的这个序列出现于这个映射后的一段长度为\(k\)的连续区间里,额,求\(i_k-i_1\)的min值,这就是标准的滑动窗口。

CF1195E OpenStreetMap

题意:

给定一个 $ n\times m $ 的矩阵 $ h $ ,求出所有大小为 $ a\times b $ 的子矩形中的最小值的和.

题解:

单调队列好题,注意二维的转化,假设我们要求以\((i,j)\)为左上顶点进行讨论,考虑这个min值的性质,显然可以拆成这个a行每一行的min然后再min,于是我们就可以对于这个矩阵每一行进行滑动窗口,得出一个新的矩阵,代表每个数往后\(b\)长度的min值,然后再以纵列做一次滑动窗口,求这a行的min就解决问题了。

贪心

一种很意识流的想法,但对问题进行详细分析便可得出策略,有两类常用方法:

  • 归纳法:每一步都保证是最优解
  • exchange argument:交换两步操作,答案不会更优(简单来说)

[NOIP2012 提高组] 国王游戏

题解:

我们考虑交换相邻的两个对于结果的影响,假设交换前为\((j,i)\),交换后为\((i,j)\),假设交换后更劣,则:

\[\max(\frac{c}{b'_i},\frac{ca'_i}{b'_j})> \max(\frac{c}{b'_j},\frac{ca'_j}{b'_i}) \]

考虑若要满足这个式子,则会出现两种情况:

\[\frac{c}{b'_i}>\frac{c}{b'_j}\& \frac{c}{b'_i}>\frac{ca'_j}{b'_i} \]

\[\frac{ca'_i}{b'_j}>\frac{c}{b'_j}\& \frac{ca'_i}{b'_j}>\frac{ca'_j}{b'_i} \]

两个都可以进行化简:

\[b'_j<b'_i\& a'_j<1 \]

\[a'_ib'_i>a'_jb'_j\& a'_i>1 \]

第一种情况因为\(a\)的数据范围不可能所以舍去,然后就发现我们要满足\(a'_ib'_i>a'_jb'_j\),这样如果交换不劣,所以按\(a'_ib'_i\)从小到大排序即可。

CF1552E Colors and Intervals

题意:

\(n \times k\) 个格子,编号从 \(1\) 到 \(n \times k\),染成 \(n\) 种颜色,每种颜色恰好 \(k\) 个。
构造 \(n\) 个区间,第 \(i\) 个区间 \([a_i, b_i]\) 满足

  • \(1 \le a_i < b_i \le n \times k\)
  • 第 \(a_i\) 个和第 \(b_i\) 个格子的颜色都是 \(i\)。
  • 每个格子被包含不超过 \(\lceil \frac{n}{k-1} \rceil\) 次。

题解:

可以有一个妙的想法,构造出来机组划分,每一组划分里面的区间互不相交,每个划分包含k-1个区间,这样绝对可以满足第三个条件。

考虑每一组内该如何考虑:

使用贪心,假设当前已经在这一组中前面的已经划分出来,后面我们选择r端点最小的满足\(c_l=c_r\)的元素,可以证明,一定可以取够\(k-1\)个区间。、

证明也是妙妙:

可以看luogu题解

倍增

不想写了

分治

不想写了

标签:frac,min,题解,元素,day1,国庆,补题,序列,单调
From: https://www.cnblogs.com/huanghezhe/p/18512744

相关文章

  • 网络编程_day1
    目录【0】关于网编(IO)【1】认识网络【2】IP地址1.基本概念2.网络号/主机号(二级划分)3.IP地址分类整体分类4.子网掩码5.练习6.三级划分【3】socket1.socket发展2.socket介绍3. 为什么需要socket?4.socket类型5.位置【4】端口号【5】字节序端口转换......
  • 面试宝典Day1
    递归函数的特点和使用场景特点:自我调用:递归函数直接或间接调用自身。基准情况:必须有一个或多个基准情况(停止条件),以避免无限递归。分解问题:将复杂问题分解为更简单的子问题,每次调用时解决部分问题。使用场景:树形结构:遍历树(如二叉树、文件系统等)。数学问题:解决数学问题如......
  • day10(Qt)OpenCV
    目录OpenCV1.OpenCV简介2.环境搭建3.人脸检测OpenCV1.OpenCV简介OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉功能。该库由英特尔公司发起,并在BSD许可证下发布,因此它是免费的,且开放源代码。OpenCV......
  • 备战蓝桥杯JAVA B组Day10
    备战蓝桥杯JAVAB组Day10目录备战蓝桥杯JAVAB组Day10前言P1428小鱼比可爱P1427小鱼的数字游戏P5727【深基5.例3】冰雹猜想P1047[NOIP2005普及组]校门外的树P5728【深基5.例5】旗鼓相当的对手前言零基础小白备战蓝桥杯第十天,刷题内容为:洛谷题单【入门3】循......
  • linux学习day1
    1.常见命令介绍(1)ctrlc:取消命令,并且换行(2)ctrlu:清空本行命令(3)tab键:可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项(4)ls:列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件(5)pwd:显示当前路径(6)cdXXX:进入......
  • 2024-10-25 学习人工智能的Day15 Pandas(2)
    二、函数1、常用的统计学函数函数名称描述说明count()统计某个非空值的数量sum()求和mean()求均值median()求中位数std()求标准差min()求最小值max()求最大值abs()求绝对值prod()求所有数值的乘积案例:#创建一个示例DataFramedata={'A':[1,2,3,4,5],......
  • LeetCode|910. 最小差值 II(day19)
    作者:MJ昊博客:掘金、CSDN等公众号:程序猿的编程之路今天是昊的算法之路第19天,今天分享的是LeetCode第910题最小差值II的解题思路。这是一道中等难度的题目,考察如何通过调整数组中的数值来最小化最大值与最小值之间的差距。题目描述简要回顾给定一个整数数组nums和......
  • 算法刷题记录(day1)
     前言 之前在LeetCode上断断续续刷了几百道题,但是很多题可能过一段时间后又忘了,打算从今天开始尽量保持每天刷题,同时记录下自己的刷题过程和对题目的理解,方便自己进行总结和复习。LC15.三数之和题目描述:给你一个整数数组 nums ,判断是否存在三元组 [nums[i],nums[j]......
  • 模拟八补题报告
     S15192一、题目报告        第一题100分,第二题100分,第三题100分,第四题100分。二、赛中概况    第一题很简单,遍历删除一下就可以。    第二题不难,设一个cnt数组统计一下就行。    第三题模拟下就可以。    第四题,见过类似的,所......
  • Unet网络搭建Day1
    Pycharm内搭建虚拟环境:一、将PyCharm中的终端运行前面的PS修改成当前环境解决方法:只需要在pycharm的设置中修改一些terminal的环境即可,具体步骤如下:1.打开pycharm中的settings;2.找到Terminal选项;3.将shellpath的位置改为cmd.exe;4.点击ok;5.重启pycharm即可。二、wandb......