【单调栈 +前缀和】AcWing 4738. 快乐子数组

news2024/10/7 4:28:57

原题链接
原题链接
在这里插入图片描述

相关算法概念介绍

前缀和(Prefix Sum)

前缀和是指将数组中从开头位置到当前位置的所有元素累加得到的新数组。通常,我们使用一个额外的数组来保存这些累加和,这个数组被称为前缀和数组。对于原始数组A,前缀和数组P的第i个元素P[i]表示A[0]到A[i]之间所有元素的和。

前缀和的应用:

  1. 区间和的快速计算:通过预先计算前缀和数组,可以在O(1)的时间复杂度内快速得到任意区间 [l, r] 的和,即 P[r] - P[l-1]。这在需要多次查询区间和的情况下,可以大大加速计算过程。
  2. 子数组问题:前缀和在解决一些子数组相关问题时非常有用,例如找到和最大的子数组、和为特定值的子数组等。
  3. 优化计算:有时候某些问题的计算过程中,存在大量重复计算的情况。通过预先计算前缀和,可以减少重复计算,从而提高算法的效率。

单调栈

博主上篇文章

本题分析

思路:
题目中的 F ( B , L , R ) F(B,L,R) F(B,L,R)定义为整数数组 B的索引从 L到 R(包括两者)的子数组的各个元素之和。
那么,一个 F ( B , L , R ) F(B,L,R) F(B,L,R)便是一次前缀和。

如果一个长度为 K的整数数组 C满足其所有前缀和均为非负整数,则称数组 C为快乐数组。

这句话的意思便是由F组成的数组长度为K的前缀和为非负整数,则为快乐数组。
那么便是要求前缀和的前缀和
最后计算所有快乐连续子数组的元素和相加的结果
对于计算连续子数组的元素和,可以先设定义r[l]为 p l p_l pl的最长快乐数组的右端点。
当1=<j<=l时,r[j]均为快乐数组。
在这里插入图片描述
(当时在做这道题的时候没有分析出来这部分,因此直接引用原作者所写)

#include <algorithm>
#include <cstring>
#include <iostream>
#include <stack>
using namespace std;
#define int long long
const int N = 1e6 + 10;

long long a[N], b[N], st[N];

signed main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t;
    cin >> t;
    for (int _ = 1; _ <= t; _++) {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++) {
            int x;
            cin >> x;
            a[i]=a[i-1]+x;
            b[i]=b[i-1]+a[i];
        }
       int top =-1;
       st[++top] = 0;
       long long ans =0;
       for(int i = 1; i <= n; i++)
       {
           while(top!=-1&&a[st[top]]>a[i])
           {
            int l =st[top--]+1,r=i;
           ans+=b[r-1]-b[l-1]-a[l-1]*(r-l);
           
           }
           st[++top]=i;
       }
        while(top!=-1)
        {
            int l = st[top--]+1,r=n+1;
            ans+=b[r-1]-b[l-1]-a[l-1]*(r-l);
        }
        cout << "Case #" << _ << ": " << ans << endl;
    }
    return 0;
}

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

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

相关文章

Appium+python自动化(十七)- - Monkey

1、Monkey简介 在Android的官方自动化测试领域有一只非常著名的“猴子”叫Monkey&#xff0c;这只“猴子”一旦启动&#xff0c;就会让被测的Android应用程序像猴子一样活蹦乱跳&#xff0c;到处乱跑。人们常用这只“猴子”来对被测程序进行压力测试&#xff0c;检查和评估被测…

快速排序QuickSort

目录 1.Hoare法 2.挖坑法 3.前后指针法 4.快排分治 5.关于快排 6.关于快排的优化 7.总体实现 总结&#xff1a; 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法 其基本思想为&#xff1a;任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码…

《5.linux驱动开发-第2部分-5.2.字符设备驱动基础》5.2.5.用开发板来调试模块

1. 首先 开发板 可以运行 Uboot 2. Ubuntu 安装好了 t f t p(启动内核zImage) 和 NFS &#xff08;挂载 根文件系统&#xff09; 3. 提前 制作好了 根文件系统&#xff08;2022年做的&#xff0c;早就忘记 怎么做了&#xff09; 4.内核 需要设置 nfs 作为根文件系统 启动…

聊聊spring-cloud的负载均衡

聊聊spring-cloud的负载均衡 1. 选择合适的负载均衡算法2. 合理设置超时时间3. 缓存服务实例列表4. 使用断路器5. 使用缓存Spring Cloud负载均衡组件对比RibbonLoadBalancerWebClient对比 总结 在微服务架构中&#xff0c;负载均衡是非常重要的一个环节&#xff0c;可以有效地提…

ES6基础知识三:对象新增了哪些扩展?

一、属性的简写 ES6中&#xff0c;当对象键名与对应值名相等的时候&#xff0c;可以进行简写 const baz {foo:foo}// 等同于 const baz {foo}方法也能够进行简写 const o {method() {return "Hello!";} };// 等同于const o {method: function() {return "…

C# List 详解四

目录 18.FindLast(Predicate) 19.FindLastIndex(Int32, Int32, Predicate) 20.FindLastIndex(Int32, Predicate) 21.FindLastIndex(Predicate) 22.ForEach(Action) 23.GetEnumerator() 24.GetHashCode() 25.GetRange(Int32, Int32) C#…

协作实现时序数据高效流转链路 | 7.20 IoTDB X RocketMQ 技术沙龙线上直播回顾

7 月 20 日&#xff0c;IoTDB X RocketMQ 技术沙龙线上直播圆满结束。工业物联网时序数据库研发商天谋科技、云原生事件流平台 Apache RocketMQ 社区的四位技术专家&#xff0c;针对实时数据接入、多样数据处理与系统的高扩展、高可靠特性的数据流转处理平台实现难点&#xff0…

计算机服务器被devos勒索病毒攻击怎么解决,数据库解密恢复方式

科学技术的发展为企业的生产运行提供了极大的便利性&#xff0c;但随之而来的网络安全也应该引起人们的重视。近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的计算机服务器内的数据库被devos后缀勒索病毒攻击&#xff0c;导致企业许多工作无法正常运行。Devos后缀勒…

89、简述RabbitMQ的架构设计

简述RabbitMQ的架构设计 BrokerQueueExchangeRoutingKeyBinding信道架构设计图 Broker RabbitMQ的服务节点 Queue 队列&#xff0c;是RabbitMQ的内部对象&#xff0c;用于存储消息。RabbitMQ中消息只能存储在队列中。生产者投递消息到队列&#xff0c;消费者从队列中获取消息…

Sql Developer日期显示格式问题

sqldeveloper模式日期显示不是很美观 并且使用日期条件查询需要将月份转为中文&#xff0c;系统兼容性差 容易以前如下报错 ORA-01861: 文字与格式字符串不匹配 01861. 00000 - "literal does not match format string"-- sqldeveloper 中执行日期条件 &#xff08;…

2023杭电多校第二场1007-foreverlasting and fried-chicken

链接&#xff1a;Problem - 7293 (hdu.edu.cn) 思路&#xff1a; 枚举度大于4 和 6 且 共同连接 4个以上点 的两个点, 其度分别记为a 和 b 若a为上面的点, 那么答案为C(a-4, 2) * C(b, 4), 反之同理 如果直接搜点会tle, 此时用bitset优化, 状态压缩, 时间复杂度为O(n^3 /32) …

只需3步,使用Stable Diffusion无限生产AI数字人视频

效果演示 先看效果&#xff0c;感兴趣的可以继续读下去。 没有找到可以上传视频的地方&#xff0c;大家打开这个网盘链接观看&#xff1a;https://www.aliyundrive.com/s/CRBm5NL3xAE 基本方法 搞一张照片&#xff0c;搞一段语音&#xff0c;合成照片和语音&#xff0c;同…

APP抓包-资产获取+Frida反代理绕过和证书校验绕过

app抓包获取资产 1.打开模拟器&#xff0c;和电脑连接同一个wifi&#xff0c;让模拟器和电脑处于同一局域网&#xff0c;在模拟器配置代理。 burp开启监听 模拟器开启app&#xff0c;burp成功获取资产信息 有时候明明配置没问题&#xff0c;为什么抓不到app数据包呢&#xff1f…

Folx Pro 5 最好用的Mac磁力链接BT种子下载工具

除了迅雷&#xff0c;还有哪个支持磁力链接下载&#xff1f;Mac电脑如何下载磁力链接&#xff1f;经常有小伙伴问老宅。今天&#xff0c;老宅给大家推荐Folx Pro For Mac&#xff0c;Mac系统超好用的磁力下载工具。 Folx是一款功能强大且易于使用的Mac下载管理器&#xff0c;并…

ChatGPT开放自定义系统级别的指令,可设置偏好变成专属助理

OpenAI官方消息https://openai.com/blog/custom-instructions-for-chatgpt OpenAI为其大型语言模型接口ChatGPT引入了自定义指令&#xff0c;旨在为用户提供更加量身定制和个性化的体验&#xff0c;可以设置您的偏好&#xff0c;ChatGPT将在未来的所有对话中记住它们。 该功…

linux:cloudfare证书申请及应用到nginx

参考&#xff1a; 免费申请网站SSL证书 有效期15年 全站开启https_哔哩哔哩_bilibili 总结&#xff1a; 登陆www.cloudfare.com 注册账号 Add a Site 增加站点 站点设置完毕后Add record 记住这个Proxy status一定要勾选&#xff0c;这是cloudfare代理https请求转发到你的服务器…

Java开发基础系列(十):异常处理

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Java开发基础系列(十):异常处理 ⏱️ 创作时间&#xff1a; 2023年07月…

深度学习——生成对抗网络GAN

基本概念 概述 GAN是一种深度学习模型&#xff0c;它是一种无监督学习算法&#xff0c;用于从随机噪声中生成逼真的数据&#xff0c;比如图像、音频、文本等。GAN的结构由两个神经网络组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discrimin…

谈谈面试大厂中碰到的问题

面试IT公司的小技巧 非常不建议在简历上造假&#xff0c;简历上能起到关键作用、有分量的部分&#xff0c;别人都是有办法去核实的&#xff0c;比如教育背景、关键性的证书、奖项等&#xff1b;核实不了的&#xff0c;又基本上也对结果产生不了太大影响&#xff0c;又何必去画…

USG6000v防火墙的基本使用:制定安全策略让不同安全区域的设备进行访问

目录 一、首先配置环境&#xff1a; 二、实验拓扑及说明 拓扑&#xff1a; PC1和PC2配置ip地址&#xff1a;​编辑​编辑 r4路由器配置ip&#xff1a; 进行防火墙的设置&#xff1a; 1、创建trust1区域和untrust1区域 2、制定防火墙的策略&#xff1a; 3、为防火墙增加可以…