码蹄集部分题目(2024OJ赛16期;单调栈集训+差分集训)
🧀🧀🧀单调栈集训
🥪单调栈
单调递增栈伪代码:
stack<int> st;
for(遍历数组)
{while(栈不为空&&栈顶元素大于当前元素)//单调递减栈就是把后方判断条件变为小于等于即可{栈顶元素出栈;//同时进行其他需要的数据记录}当前数据入栈;
}
推荐这篇:[数据结构]——单调栈-CSDN博客
🥪单调栈vs单调队列
单调栈和单调队列都是用于记录一个单增或单减区间的工具,其主要区别有以下几点:
-
单调栈的数据结构是栈,单调队列的数据结构是队列
-
单调栈是一端操作,单调队列是双端操作
-
单调栈适用于需要寻找左右第一个比当前元素大或小的位置的问题,而单调队列适用于需要在滑动窗口中维护最值的问题
1🐋🐋矩形覆盖(钻石;单调栈)
时间限制:1秒
占用内存:128M
🐟题目描述

🐟输入输出格式

🐟样例
🐚样例

🐚备注

🐟题目思路
这道题目不同于《刷墙》的是,这道题目的矩形大小是任意的。
本题中,建筑物的宽度无用,只需要看高度。
n栋楼最多就需要n张海报,那么怎么减少海报数量,当出现“低高低”并且“低”的两栋建筑一样高的情况时,就可以减少一张海报了。(“高低高”的情况无法减少海报数,因为不能贴出建筑物范围)
所以我们考虑模拟单调栈,当出现上述情况时就可以将ans(可以减少的海报数量)++了。
🐟代码
#include<bits/stdc++.h>
using namespace std;
int n,ans,d,w;
stack<int> st;
int main( )
{cin>>n;for(int i=1;i<=n;i++){cin>>d>>w;while(!st.empty()&&w<=st.top())//模拟单调递增栈{if(st.top()==w) ans++;st.pop();//将不满足单调递增的元素pop出来}st.push(w);}cout<<n-ans<<endl;return 0;
}
2🐋🐋多项式变换求值(钻石;单调栈)
时间限制:1秒
占用内存:64M
🐟题目描述

🐟输入输出格式

🐟样例
🐚样例

🐚备注

🐟题目思路
题目明确给出将ai换成比ai小的第一个数,根据前边我们对单调栈和单调队列的对比,可以看出,这很明显是单调栈解决的问题。
🐟代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MOD=99887765;
const int N=5e6+10;
stack<int> st;
int n,x,a[N],b[N];//a用来记录所有元素,b用来记录i的后方比i小的第一个元素的大小
ll ans;
int main( )
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>x;for(int i=1;i<=n+1;i++){cin>>a[i];while(!st.empty()&&a[i]<a[st.top()])//单调递增栈{b[st.top()]=a[i];//我就是比要出来的这些元素小的第一个元素,记录st.pop();}st.push(i);}for(int i=1;i<=n+1;i++)//计算{ans=ans*x+b[i];ans=(ans%MOD+MOD)%MOD;//直接取余会出现复数的情况,直接加上MOD取余又会出现超出数据类型范围的情况,所以要这样写}cout<<ans<<endl;return 0;
}
3🐋🐋这项目我小码哥投了(星耀;单调栈)
时间限制:1秒
占用内存:128M
🐟题目描述

🐟输入输出格式

🐟样例
🐚样例

🐚备注

🐟题目思路
这道题目就是求最大的全是G的矩形的大小,然后乘以利润10即可,也就是求最大子矩形面积的问题。
这里,我们将每一行及其上方所有行的一列列1看作类似建筑,然后使用单调栈操作:

🐟代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,m,a[N][N],ans;
char ch;
int maxRec(int x)
{int ret=0;stack<int> st;st.push(0);for(int i=1;i<=m+1;i++){while(a[x][i]<a[x][st.top()])//单调递增栈{//每次需要pop的时候都要计算最大子矩形面积int h=a[x][st.top()];st.pop();int w=i-1-st.top();//以h为高的最大子矩形宽度ret=max(ret,w*h);}st.push(i);}return ret;
}
int main( )
{cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>ch;if(ch=='G') a[i][j]=1;//G标记为1}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]) a[i][j]+=a[i-1][j];//注意,这里不是前缀和,如果某一条的底下(a[i][j])为0了,那么这一列1的数量重置为0}}for(int i=1;i<=n;i++) ans=max(ans,maxRec(i));cout<<ans*10<<endl;return 0;
}
4🐋🐋山脉(钻石;单调栈)
时间限制:1秒
占用内存:64M
🐟题目描述

🐟输入输出格式

🐟样例
🐚样例

🐚备注

🐟题目思路
翻译一下题目,就是遍历所有山,找到当前山右边第一个高于或与我同高的山,计算两山之间山的数量,最后将这些山的数量进行累加,很典型的单调栈问题。
使用单调栈就可以在遍历一遍数组的时间内完成任务。
🐟代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,num,sum;
stack<int>st;
signed main( )
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);//这两句是用来提高输入输出性能cin>>n;for(int i=1;i<=n;i++){cin>>num;while(!st.empty()&&st.top()<=num) st.pop();//构建单调递减栈sum+=st.size();//如果top元素被pop掉了,这里每次的累加也都记录下来了st.push(num);}cout<<sum<<endl;return 0;
}
🥪C/C++输入输出性能优化
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
-
ios::sync_with_stdio(false);: 默认情况下,C++ 的输入输出流与 C 标准 I/O 是同步的,这意味着它们共享底层的文件描述符。但是,当你使用 C++ 的输入输出流时,可能会导致性能下降,因为每次输入或输出时,都需要同步 C 的标准 I/O。通过设置sync_with_stdio(false),你告诉 C++ 不要与 C 的标准 I/O 同步,这样可以提高输入输出的速度。 -
cin.tie(0), cout.tie(0);:cin和cout都是 C++ 的标准输入输出流对象。默认情况下,它们是关联的,意味着在使用cin进行输入时,cout的缓冲区会被刷新,这可能会导致性能下降。通过cin.tie(0)和cout.tie(0),你告诉 C++ 不要在cin和cout之间建立关联,从而避免缓冲区刷新,提高性能。
🧀🧀🧀差分集训
🥪差分思想
对[l,r]区间,区间中每个数加上m,就变成了:
-
b[l]+=m
-
b[r+1]-=m
每次更新的只有b数组中l和r+1这两个位置的数
差分算法适用情况:
-
总结而言,就是:序列数据+区间修改/查询
-
序列数据变化较小: 差分算法适用于序列中的变化较小的情况。如果序列中的大部分元素保持不变,只有少数元素发生了变化,差分算法能够高效地捕捉到这些变化,并且可以在较小的存储空间和时间复杂度下进行处理。
-
差分序列具有规律性: 如果序列中的变化具有某种规律性,例如周期性变化、递增或递减变化等,那么差分算法可以更好地捕捉到这种规律,从而简化问题的处理。
-
需要高效地处理增量变化: 在一些场景中,我们只关注序列中的增量变化,而不需要完整的历史数据。差分算法可以帮助我们高效地处理这种增量变化,而不必维护完整的原始数据序列。
-
需要高效地进行序列操作: 差分算法可以用于高效地进行序列操作,例如区间修改、区间查询等操作。通过预处理原始序列并构建差分序列,可以在一定程度上简化问题的处理,并且减少每次操作的时间复杂度。
推荐这篇:差分算法介绍-CSDN博客
5🐋🐋区间修改(黄金;差分)
时间限制:1秒
占用内存:128M
🐟题目描述

🐟输入输出格式

🐟样例
🐚样例

🐚备注

🐟题目思路
对序列数据的区间进行加或减操作,典型的使用差分算法的问题。
工资都相同,也就是说差分数组b全部为0。由于差分变换每次只修改两个数,也就是说,每次变换可以让正负的两个数各减加1,比如[-1,1,1],经过一次变换就可以变成[0,1,0]。
这道题目就是给出a数组,求sub数组并进行顺带数据处理的。
🐟代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,a[N],sub[N],num1,num2;
int main( )
{int ans=0;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=2;i<=n;i++){sub[i]=a[i]-a[i-1];//构建差分数组if(sub[i]>0) num1+=sub[i];//所有正的差值else num2+=sub[i];//所有负的差值}//每次操作都可以让一对正负分别减加1,所以大的那个数是需要额外操作的,结果就是大的这个数cout<<max(num1,-num2)<<endl;return 0;
}
6🐋🐋相对马高(黄金;差分)
时间限制:1秒
占用内存:128M
🐟题目描述

🐟输入输出格式

🐟样例
🐚样例
输入:
20 1000 6
5 14
16 20
9 11
17 18
6 7
2 4
输出:
1000
1000
999
1000
1000
999
999
999
999
998
999
999
999
1000
1000
1000
999
999
999
1000
🐚备注

🐟题目思路
最大可能身高,那么就是比我矮的我认为就比我矮1(多次比较自然会出现一匹马比另一匹马矮很多的情况)。
也就是说,对序列数据做减法,区间内的马身高都减一,典型的利用差分算法的问题。
由于是左右区间开端操作,所以1号马的身高一定是最高的那个数,所以将g[0]和g[1]设为h,sub[1]设为0即可。
这道题目就是给出了差分数组sub和a数组的第一个数,求完整的a数组。我们知道,sub的前缀和就是a。
🐟代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,h,f,g[N],sub[N],a,b;
int main( )
{cin>>n>>h>>f;sub[1]=h;while(f--){cin>>a>>b;if(a==b||b==a+1) continue;if(a>b) swap(a,b);//这里注意不是对l和r+1操作了,因为是小括号,不是中括号,是左右端开端操作,所以是对l+1和r操作sub[a+1]-=1;sub[b]+=1;//这里不用担心超出最高身高,因为前边已经减过了,累加后就抵消了,所以最多只会出现局部高低差的情况,不会超出最高身高}for(int i=1;i<=n;i++){g[i]=g[i-1]+sub[i];//累加得到结果cout<<g[i]<<endl;}return 0;
}
有问题我们随时评论区见~
⭐点赞收藏不迷路~
相关文章:
码蹄集部分题目(2024OJ赛16期;单调栈集训+差分集训)
🧀🧀🧀单调栈集训 🥪单调栈 单调递增栈伪代码: stack<int> st; for(遍历数组) {while(栈不为空&&栈顶元素大于当前元素)//单调递减栈就是把后方判断条件变为小于等于即可{栈顶元素出栈;//同时进行其他…...
安卓玩机搞机技巧综合资源----自己手机制作证件照的几种方法 免费制作证件照
接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…...
揭秘循环购模式:消费返利新玩法,引领电商新潮流
在当今的消费市场中,有一种商业模式引起了广大消费者的热烈讨论——那就是循环购模式。你可能会想,消费满千元就能得到两千元的福利,每天还能领取现金,这怎么可能呢?商家难道真的在“慷慨解囊”?今天&#…...
【制作100个unity游戏之26】unity2d横版卷轴动作类游13(附带项目源码)
最终效果 系列导航 文章目录 最终效果系列导航前言存储点灯光后处理存储位置信息存储更多数据存储场景信息持久化存储数据引入Unity 的可序列化字典类调用 游戏结束源码完结 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各…...
Golang使用HTTP框架zdpgo_resty实现文件下载
核心代码 代码解析: client.SetOutputDirectory("Downloads") 设置下载目录client.R().SetOutput("test.go").Get("http://127.0.0.1:3333/download 指定下载文件名并进行下载 // 设置输出目录路径,如果目录不存在ÿ…...
提取COCO 数据集的部分类
1.python提取COCO数据集中特定的类 安装pycocotools github地址:https://github.com/philferriere/cocoapi pip install githttps://github.com/philferriere/cocoapi.git#subdirectoryPythonAPI若报错,pip install githttps://github.com/philferriere…...
高刚性滚柱直线导轨有哪些优势?
滚柱导轨是机械传动系统中用于支持和引导滑块或导轨的装置,承载能力较高、刚性强及高精度等特点。特别适用于大负载和高刚性的工业设备,如机床、数控机床等设备,这些优势使其在工业生产和机械设备中得到了广泛的应用。 1、高精度:…...
KNN及降维预处理方法LDA|PCA|MDS
文章目录 基本原理模型介绍模型分析 python代码实现降维处理维数灾难 curse of dimensionality线性变换 Linear TransformationLDA - 线性判别分析LDA python 实现PCA - 主成分分析PCA最近重构性PCA最大可分性PCA求解及说明PCA python实现 多维缩放 Multiple Dimensional Scali…...
论文精读-SwinIR Image Restoration Using Swin Transformer
论文精读-SwinIR: Image Restoration Using Swin Transformer SwinIR:使用 Swin Transformer进行图像恢复 参数量:SR 11.8M、JPEG压缩伪影 11.5M、去噪 12.0M 优点:1、提出了新的网络结构。它采用分块设计。包括浅层特征提取:cnn提取&#…...
解释Spring Bean的生命周期
Spring Bean的生命周期涉及到Bean的创建、配置、使用和销毁的各个阶段。理解这个生命周期对于编写高效的Spring应用和充分利用框架的功能非常重要。下面是Spring Bean生命周期的主要步骤: 1. 实例化Bean Spring容器首先将使用Bean的定义(无论是XML、注…...
CTF网络安全大赛web题目:字符?正则?
题目来源于:bugku 题目难度:难 题目描 述: 字符?正则? 题目htmnl源代码: <code><span style"color: #000000"> <span style"color: #0000BB"><?php <br />highl…...
Linux——Docker容器虚拟化平台
安装docker 安装 Docker | Docker 从入门到实践https://vuepress.mirror.docker-practice.com/install/ 不需要设置防火墙 docker命令说明 docker images #查看所有本地主机的镜像 docker search 镜像名 #搜索镜像 docker pull 镜像名 [标签] #下载镜像&…...
Transformer详解(3)-多头自注意力机制
attention multi-head attention pytorch代码实现 import math import torch from torch import nn import torch.nn.functional as Fclass MultiHeadAttention(nn.Module):def __init__(self, heads8, d_model128, droput0.1):super().__init__()self.d_model d_model # 12…...
运用HTML、CSS设计Web网页——“西式甜品网”图例及代码
目录 一、效果展示图 二、设计分析 1.整体效果分析 2.头部header模块效果分析 3.导航及banner模块效果分析 4.分类classify模块效果分析 5.产品展示show模块效果分析 6.版权banquan模块效果分析 三、HTML、CSS代码分模块展示 1. 头部header模块代码 2.导航及bann…...
大语言模型是通用人工智能的实现路径吗?【文末有福利】
相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 关于大语言模型的内容,推荐参考这个专栏。 内容大纲 相关说明一、哲学与人工智能二、内容简介三、书籍简介与福利粉…...
c语言——宏offsetof
1.介绍 !!! offsetof 是一个宏 2.使用举例 结构体章节的计算结构体占多少字节需要先掌握(本人博客结构体篇章中已经讲解过) 计算结构体中某变量相对于首地址的偏移,并给出说明 首先,结构体首个…...
C#串口通信-串口相关参数介绍
串口通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种双向通讯方式。 串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的通信协议,…...
节省时间与精力:用BAT文件和任务计划器自动执行重复任务
文章目录 1.BAT文件详解2. 经典BAT文件及使用场景3. 使用方法4. 如何设置BAT文件为定时任务5. 实例应用:自动清理临时文件 BAT文件,也就是批处理文件,是一种在Windows操作系统中自动执行一系列命令的文本文件。这些文件的扩展名为 .bat。通过…...
一年前的Java作业,模拟游戏玩家战斗
说明:一年前写的作业,感觉挺有意思的,将源码分享给大家。 刚开始看题也觉得很难,不过写着写着思路更加清晰,发现也没有想象中的那么难。 一、作业题目描述: 题目:模拟游戏玩家战斗 1.1 基础功…...
C++ 学习 关于引用
🙋本文主要讲讲C的引用 是基础入门篇~ 本文是阅读C Primer 第五版的笔记 🌈 关于引用 几个比较重要的点 🌿引用相当于为一个已经存在的对象所起的另外一个名字 🌞 定义引用时,程序把引用和它的初始值绑定(b…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...


