码蹄集部分题目(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);: cincout 都是 C++ 的标准输入输出流对象。默认情况下,它们是关联的,意味着在使用 cin 进行输入时,cout 的缓冲区会被刷新,这可能会导致性能下降。通过 cin.tie(0)cout.tie(0),你告诉 C++ 不要在 cincout 之间建立关联,从而避免缓冲区刷新,提高性能。

🧀🧀🧀差分集训

🥪差分思想

对[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;
}

有问题我们随时评论区见~

⭐点赞收藏不迷路~

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

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

相关文章

【Linux】LAMP集群分布式安全方案

LAMP集群分布式安全方案主要涉及确保Linux、Apache、MySQL和PHP&#xff08;LAMP&#xff09;组合构成的集群环境的安全性和稳定性。 本次实验通过网络层安全对防火墙配置&#xff1a;使用防火墙&#xff08;如iptables或firewalld&#xff09;来限制对集群的访问&#xff0c;只…

[集群聊天服务器]----(五)User类、UserModel类

接着上文[集群聊天服务器]----(四)MySQL数据库模块&#xff0c;接下来我们对User类、UserModel类进行剖析&#xff0c;User表和UserModel类是项目最基本也是最重要的部分&#xff0c;通过它我们对用户的id&#xff0c;用户名&#xff0c;密码&#xff0c;状态相关信息进行存储&…

uniapp+canvas实现逐字手写效果

在移动端使用 UniApp 进行逐字手写的功能。用户可以在一个 inputCanvas 上书写单个字&#xff0c;然后在特定时间后将这个字添加到 outputCanvas 上&#xff0c;形成一个逐字的手写效果。用户还可以保存整幅图像或者撤销上一个添加的字。 初始化 Canvas&#xff1a; 使用 uni.c…

Top3专业课150满分,怎么考的?

这个系列会邀请上岸学长学姐进行经验分享~ 今天经验分享的同学是小马哥上海交大819的全程班学员&#xff0c;专业课150分满分&#xff0c;这位同学也是819期末考试的第一名&#xff0c;非常厉害&#xff01;大家吸吸欧气&#xff01; 初试成绩单 前言 先介绍下自己&#xff0…

新火种AI|复旦团队在“冷冻人脑”领域获得重大进展!人工智能是否会对此形成助力?

​在低温医学领域&#xff0c;“冷冻人脑”技术的研究和突破既是重点&#xff0c;也是难点。因为这项技术关乎着人类是否可以取得一个令人瞩目的突破——人类的生命是否能够得到延续。 早几年&#xff0c;诸如“利用人体冷冻技术将身患绝症的病人保存十几年&#xff0c;几十年…

C# 文件清理

/// <summary>/// 定期清除文件/// </summary>/// <param name"fileDirect">文件夹</param>/// <param name"postFix">文件后缀</param>/// <param name"saveDay">保存天数</param>private voi…

IntelliJ IDEA集成Baidu Comate,商城系统支付交易功能开发实战

文章目录 Baidu Comate介绍安装配置体验安装插件配置体验注释生成代码技术问答 实战设计表生成代码导入数据 总结 Baidu Comate介绍 在科技互联网飞速发展的今天&#xff0c;百度凭借其深厚的技术积累和创新能力&#xff0c;推出了一款名为Baidu Comate智能代码助手的产品。该…

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《基于改进粒子滤波的锂离子电池剩余寿命预测 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Windows 10x64 IoT Enterprise LTSC 2021

打KB5036892补丁&#xff0c;升级版本19044.4291&#xff0c;打简体中文补丁包&#xff0c;系统后续升级需要升级英文补丁&#xff0c;需要重新打中文补丁包&#xff0c;系统禁用升级。禁用打印机服务&#xff0c;需要安装打印机的自行打开服务Print Spooler。 链接&#xff1a…

【SqL】数据库脚本编写规范和指南

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目的 2 SQL书写规范 3 SQL编写原则 软件全套资料获取进主页或者本文末个人名片直接获取。

Spring AOP的实操 + 原理(动态代理)

1 什么是Spring AOP 要想知道Spring AOP那必然是是要先知道什么是AOP了: AOP&#xff0c;全称为 Aspect-Oriented Programming&#xff08;面向切面编程&#xff09;&#xff0c;是一种编程范式&#xff0c;用于提高代码的模块化&#xff0c;特别是横切关注点&#xff08;cros…

钡铼BL205分布式IO在精密机械加工自动化中的精准控制OPC UA

随着工业自动化技术的不断发展&#xff0c;精密机械加工领域对于高效、精准的控制需求日益增加。在这一背景下&#xff0c;钡铼BL205分布式IO的出现为精密机械加工自动化注入了新的活力和可能性。本文将探讨钡铼BL205分布式IO在精密机械加工自动化中的应用&#xff0c;尤其是其…

使用Python探究OpenAI API

谁没听说过OpenAI?这家人工智能研究实验室因其著名的产品ChatGPT而改变了世界。它改变了AI实施领域&#xff0c;许多公司现在急于成为下一大热点。 尽管竞争激烈&#xff0c;OpenAI仍然是任何生成式AI业务需求的首选公司&#xff0c;因为它拥有最好的模型和持续的支持。该公司…

在使用LabVIEW控制多个串口设备进行数据读取时,读取时间过长

在使用LabVIEW控制多个串口设备进行数据读取时&#xff0c;如果发现数据更新时间超过5秒&#xff0c;可以从以下几个方面进行分析和解决&#xff1a; 1. 串口配置与通信参数 确保每个串口的通信参数&#xff08;波特率、数据位、停止位、校验位等&#xff09;配置正确&#x…

【Spring Security系列】权限之旅:SpringSecurity小程序登录深度探索

作者&#xff1a;后端小肥肠 创作不易&#xff0c;未经允许严禁转载。 姊妹篇&#xff1a; 【Spring Security系列】Spring SecurityJWTRedis实现用户认证登录及登出_spring security jwt 退出登录-CSDN博客 1. 前言 欢迎来到【Spring Security系列】&#xff01;在当今数字化…

识别剪贴板的内容并且添加磁力头

有时候复制的磁力链接并没有磁力头&#xff0c;而只有后面的内容&#xff0c;这个时候就必须给磁力链接添加开头magnet:xturn:btih:下载软件才能识别&#xff0c;如果经常需要这么做比较麻烦&#xff0c;于是我写了一个自动添加磁力头的小软件&#xff0c;运行即可自动添加&…

记录一个写SpringBoot中Hive数据可以正常提取但无法存到MySQL的bug

【背景】 我正在用SpringBoot框架写一个数据治理项目&#xff0c;目前所处阶段是将hive和hdfs中的元数据提取出来&#xff0c;存储到MySQL中&#xff0c;我的hive和hdfs上的数据存储在三台Linux服务器上&#xff08;hadoop102-104&#xff09;&#xff0c;MySQL在我本地Window…

JAVA 转 Golang——速通 Golang 基础

文章目录 1. 前言&#xff1a;2. go的下载与配置3. Golang 目录结构4. Golang 的基础语法4.1. 变量声明4.2. 输入输出4.3. 条件控制4.4. 数组和切片4.5. 映射表 1. 前言&#xff1a; 根据鼠鼠的实习投递经历&#xff0c;由于越来越多中大型公司都使用 Golang&#xff0c;在现在…

vue + SpringBoot + flowable 实现工作流审批功能 (流程图部署)

目录 搭建前端vue项目 vue init webpack project_name 初始化项目 导入 element-ui 框架 npm install element-ui -s 设置 element-ui 全局配置 编辑 main.js 文件 import ElementUI from "element-ui"; // ui框架导入 import element-ui/lib/theme-chal…

文心大模型4.0创建智能体:资深研发专家一对一辅导

目录 前言 一、什么是文心智能体平台&#xff1f; 1、通过平台能做什么 2、平台的优势 3、智能体类型 二、如何访问和使用这个智能体&#xff1f; 1、零代码开发&#xff1a;一句话创建智能体 2、资深研发专家一对一辅导智能体介绍 总结 前言 在当今快节奏和高度竞争的…