蓝桥杯倒计时 43天 - 前缀和,单调栈

最大数组和

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法思路:利用前缀和化简 for 循环将 n^2 简化成 n+n,以空间换时间。枚举每个 m,m是删除最小两个数,那k-m就是删除最大数,m<=k,求和最大的值。暴力就是枚举 m-O(n),计算前 n-(k-m)的和减去前 2*m 的和O(n+n)。前缀和能化简求前 n 个和的过程变成 O(1)的复杂度,因为前缀和能够直接进行直接查询。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5+10;LL a[N];
int t,n,k;
LL sum[N];int main( ){cin>>t;while(t--){memset(a, 0, sizeof(a));memset(sum, 0, sizeof(sum));cin>>n>>k;for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+1+n);for(int i=1;i<=n;i++)sum[i]=a[i]+sum[i-1];LL ans = 0;for(int m=0;m<=k;m++){ans = max(ans,sum[n-(k-m)]-sum[2*m]);}cout<<ans<<endl;}return 0;
}

可以利用 vector 化简代码,不过数组下标要从 0开始。

视野总和

描叙:有n个人站队,所有的人全部向右看,个子高的可以看到个子低的发型,给出每个人的身高,问所有人能看到其他人发现总和是多少。
输入:4 3 7 1
输出:2

思路:设置单调递减栈,复杂度 On,如果暴力,复杂度 On^2

#include<bits/stdc++.h>
using namespace std;
stack<int> st;
const int N = 1e5 +10;
int n;
int a[N];
int main( ){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];int ans = 0;for(int i=1;i<=n;i++){if(st.empty()||st.top()>=a[i])st.push(a[i]);else{while(!st.empty()&&st.top()<a[i]){st.pop();ans++;}st.push(a[i]);if(st.empty())ans--;}}cout<<ans<<endl;return 0;
}

柱状图中的最大矩形

柱状图中的最大矩形
在这里插入图片描述
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 +10;
int n;
int a[N];
vector<int> heights;
int main( ){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];int ans = 0;for(int i=1;i<=n;i++){int wide=1;for(int j=i-1;j>=1;j--){if(a[j]>=a[i])wide++;}for(int j=i+1;j<=n;j++){if(a[j]>=a[i])wide++;}ans = max(ans,wide*a[i]);}cout<<ans<<'\n';return 0;
}

四元组问题

在这里插入图片描述
在这里插入图片描述
青茶绿梅*2博主讲的很好

暴力做法 n^4 能过 50%,所以需要进行优化,这题需要 n 或 nlogn 的时间复杂度。
算法思路:将四元组问题转化成三元组(单调递减栈)+前缀和问题。假设前三个元素已经知道,那只需要找到小于 c 的 d 则四元组存在,利用后缀和来得到c后面的最小值作为 d。然后找前三元组,前三元组的 abc 的曲线画出来有利于理解。算法思路:将一个元素入栈,然后从左到右依次与栈顶判断,如果小于栈顶入栈,如果大于栈顶,则出栈直到小于栈顶或栈元素为空,这时,最后一个出栈的为 a,入栈元素为 b,如果接下来继续操作,找到比栈顶元素大,则继续刚才过程,同时更细 a 与 b,如果找到比栈顶元素小,则为 c 可以查询后缀和判断是否有 d 的存在。栈顶元素是目前最大的 b。
模拟一下:1000 333 222 888 999 100 50

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 +10;
int n;
int nums[N];
stack<int> st;
int main( ){cin>>n;for(int i=1;i<=n;i++)cin>>nums[i];int k=INT_MIN;vector<int>min_r(n,INT_MAX);for (int i=n-1; i>=1; i--) {min_r[i] = min(min_r[i+1],nums[i]);}for(int i=1;i<=n;i++){if(k>nums[i]&&nums[i]>min_r[i]){cout<<"YES";return 0;}while(!st.empty()&&st.top()<nums[i]){k = max(k,nums[i]);st.pop();}st.push(nums[i]);}cout<<"NO";return 0;
}

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

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

相关文章

《幻兽帕鲁》游戏对服务器性能的具体要求是什么?

《幻兽帕鲁》游戏对服务器性能的具体要求是什么&#xff1f; CPU&#xff1a;官方最低要求为i5-3570K&#xff0c;但在多人游玩时可能会有明显卡顿。此外&#xff0c;还有建议选择4核或更高性能的处理器&#xff0c;以确保游戏运行流畅。 内存&#xff1a;对于不同人数的联机&…

Liberod的License申请

Liberod的License申请 找到license申请的路径 查找C盘的磁盘序列号 键盘的win+R,输入cmd 输入vol,然后回车 图中的DiskID就是填写你C盘序列号的位置,填写完成后点击Register,几秒钟后会提示你,预计45分钟后会发送到你的邮箱

二维码门楼牌管理系统技术服务详解

文章目录 前言一、二维码门楼牌管理系统的设置原则二、二维码门楼牌管理系统的实施计划三、二维码门楼牌管理系统的管理要求四、个性化门牌的制作与费用 前言 随着信息技术的飞速发展&#xff0c;二维码门楼牌管理系统作为一种高效、便捷的管理手段&#xff0c;逐渐受到广泛关…

SpringBoot项目连接Redis报错:Connection refused: no further information

今天在使用SpringBoot连接Redis时发生了报错 明明Jedis能够连接成功为什么StringRedisTemplate就不行? 然后在网上找了一下说是关闭防火墙或者修改配置文件但是都不管用 最后发现是Redis在SpringBoot3之后yml的配置方式发生了改变 相较于之前多了一个前缀, 由于我刚开始没有…

GitLab代码服务器搭建

在Ubuntu上搭建GitLab服务器需要按照一系列步骤进行操作。以下是一个基本的指南&#xff1a; 安装必要的依赖包&#xff1a;首先&#xff0c;确保系统已经安装了所需的依赖包。这通常包括curl、openssh-server、ca-certificates和postfix&#xff08;如果你打算使用GitLab的邮件…

鉴源论坛 · 观辙丨TLS协议基本原理与Wireshark分析

作者 | 苏少博 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 背 景 随着车联网的迅猛发展&#xff0c;汽车已经不再是传统的机械交通工具&#xff0c;而是智能化、互联化的移动终端。然…

【SVN】使用TortoiseGit删除Git分支

使用TortoiseGit删除Git分支 前言 平时我在进行开发的时候&#xff0c;比如需要开发一个新功能&#xff0c;这里以蘑菇博客开发服务网关-gateway功能为例 一般我都会在原来master分支的基础上&#xff0c;然后拉取一个新的分支【gateway】&#xff0c;然后在 gateway分支上进…

在golang中使用protoc

【Golang】proto生成go的相关文件 推荐个人主页&#xff1a;席万里的个人空间 文章目录 【Golang】proto生成go的相关文件1、查看proto的版本号2、安装protoc-gen-go和protoc-gen-go-grpc3、生成protobuff以及grpc的文件 1、查看proto的版本号 protoc --version2、安装protoc-…

Qt介绍以及qt_creater的安装和C++项目工程创建

最近天气严寒&#xff0c;同学们要注意保暖哦&#xff01;学习的同时别忘了照顾好自己呀&#xff01;o(*&#xffe3;▽&#xffe3;*)ブ 目录 一、Qt 1、Qt概念 2、常见的GUI 二、安装qt_creater 方法一&#xff1a; 方法二&#xff1a; 三、Qt_creater 中C项目的创建 …

RabbitMQ安装及使用

系列文章目录 文章目录 系列文章目录前言一、下载二、安装三、插件安装四、配置五、权限六、集群模式 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&…

电阻识别,测量和选型,小白必读!

注&#xff1a;针对很多入门小白不懂元器件&#xff0c;一些老工程师上班很多年有的也不懂得总结知识点&#xff0c;以及想学习不知道怎么系统学习的这一类人群&#xff0c;前方知识点来袭&#xff0c;请君放心食用~ 一&#xff0c;电阻的识别&检测、特性和基本参数 1.1 电…

7.WEB渗透测试-Linux基础知识-Linux基础操作(一)

内容参考于&#xff1a; 易锦网校会员专享课 上一篇内容&#xff1a;5.WEB渗透测试-前置基础知识-常用的dos命令-CSDN博客 1.终端 终端&#xff1a;是一种特殊的字符设备&#xff0c;用来向计算机输入数据和显示计算机的输出 2.相对路径、绝对路径 绝对路径&#xff1a;cd/h…