Least Prefix Sum

题目链接

Hello 2023

C. Least Prefix Sum


思路:

仔细看式子,发现可以对它进行推理( m m m 是定值, 1 ≤ k ≤ n 1\le k\le n 1kn ):

  1. k ≤ m k\le m km 时,有 a 1 + a 2 + ⋯ + a k ≥ a 1 + a 2 + ⋯ + a m a_1 + a_2 + \cdots + a_k \geq a_1 + a_2 + \cdots + a_m a1+a2++aka1+a2++am 0 ≥ a k + 1 + a k + 2 + ⋯ + a m 0 \ge a_{k+1} + a_{k+2} + \cdots + a_m 0ak+1+ak+2++am所以我们需要每个 [ k + 1 , m ] [k+1,m] [k+1,m] 区间的和都 ≤ 0 \le 0 0 ( 1 ≤ k ≤ m ) (1\le k\le m) (1km)
  2. k > m k\gt m k>m 时,有 a 1 + a 2 + ⋯ + a k ≥ a 1 + a 2 + ⋯ + a m a_1 + a_2 + \cdots + a_k \geq a_1 + a_2 + \cdots + a_m a1+a2++aka1+a2++am a m + 1 + a m + 2 + ⋯ + a n ≥ 0 a_{m+1} + a_{m+2} + \cdots + a_n \ge 0 am+1+am+2++an0所以我们需要每个 [ m + 1 , n ] [m+1,n] [m+1,n] 区间的和都 ≥ 0 \ge 0 0 ( 1 ≤ k ≤ m ) (1\le k\le m) (1km)

先看第一种情况,怎么用最小的操作次数维护这个性质呢?一种贪心的想法是从 m m m 2 2 2 看,如果满足条件就不动,如果不满足条件就选一个最大的数把它变成负的即可。这样跑一遍,操作的次数就是最少的。

怎么保证最大的数一定是正数,从而变负数呢?而且只操作一次即可呢?因为前面都满足条件,区间和为负数,到这个数就不满足条件了,所以这个数一定是正数,把它变负一定整个区间和都变成负数,我们去找更大的数变负,显然更满足条件。

第二种情况同理。这两种情况互不影响,所以贪心策略是正确的。维护最大值和最小值可以用优先队列或者 m u l t i s e t multiset multiset,不过 m u l t i s e t multiset multiset 使用 e r a s e erase erase 成员函数进行值的删除的时候,会把所有相同的值同时删除,所以要用 S . e r a s e ( S . f i n d ( x ) ) S.erase(S.find(x)) S.erase(S.find(x)) 的写法(迭代器删除)。

code:

#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
const int maxn=2e5+5;
typedef long long ll;int T,n,m,a[maxn];int main(){cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];multiset<int> S;int cnt=0;ll tot=0;for(int i=m;i>=2;i--){S.insert(a[i]);tot+=a[i];if(tot>0){ll t=*S.rbegin();S.erase(S.find(t));tot-=t;t=-t;tot+=t;S.insert(t);cnt++;}}S.clear();tot=0;for(int i=m+1;i<=n;i++){S.insert(a[i]);tot+=a[i];if(tot<0){ll t=*S.begin();S.erase(S.begin());tot-=t;t=-t;tot+=t;S.insert(t);cnt++;}}cout<<cnt<<endl;}return 0;
}

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

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

相关文章

pycharm

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;零基础学Python &#x1f4ac;个人格言&#xff1a;不断的翻越一…

ubuntu22.04 静态IP设置脚本

#!/bin/bash# 设置静态IP地址的脚本# 网卡名称 interface"ens33"# 静态IP地址 ip_address"192.168.225.2"# 子网掩码长度 subnet_mask_len"24"# 默认网关 default_gateway"192.168.225.1"# DNS服务器 dns_servers"[114.114.114.1…

企业计算机服务器中了mallox勒索病毒怎么办?Mallox勒索病毒解密流程步骤

网络技术的不断应用与发展&#xff0c;为企业的生产运营带来了极大便利&#xff0c;企业通过网络办公开展各项工作业务已经成为常态&#xff0c;网络为企业的发展带来了更多机遇&#xff0c;但随之而来的网络数据安全威胁也在不断增加。近期&#xff0c;云天数据恢复中心接到山…

19k star, 导出微信聊天记录,生成 HTML、Word、CSV等格式,并分析聊天数据,做成可视化年报

19k star, 导出微信聊天记录&#xff0c;生成 HTML、Word、CSV等格式&#xff0c;并分析聊天数据&#xff0c;做成可视化年报 分类 开源分享 项目名: 留痕 -- 一款强大的微信聊天管理工具 Github 开源地址&#xff1a;https://github.com/LC044/WeChatMsg Gitee 开源地址&…

分布式架构中一些常用算法的理解

对分布式算法 - 一致性Hash算法的理解 一致性哈希算法是一种分布式算法&#xff0c;用于解决数据分布和负载均衡问题。它通过将数据和节点映射到一个哈希环上&#xff0c;实现了数据在节点之间的均匀分布和最小化数据迁移。 一致性哈希算法的核心思想是将数据和节点都映射到哈…

python随笔学习

python里面的高阶函数: 在Python中&#xff0c;高阶函数是指能够接收其他函数作为参数&#xff0c;或者将函数作为返回值的函数。这种特性使得函数更加灵活&#xff0c;可以用来构建更复杂的功能。 Python中常见的高阶函数: map(function, iterable)&#xff1a;将一个函数应…

百度行驶证C++离线SDK V1.1 C#接入

百度行驶证C离线SDK V1.1 C#接入 目录 说明 效果 项目 代码 下载 说明 自己根据SDK封装了动态库&#xff0c;然后C#调用。 SDK包结构 效果 项目 代码 using Newtonsoft.Json; using System; using System.Drawing; using System.Runtime.InteropServices; using System…

LeetCode-94. 二叉树的中序遍历【栈 树 深度优先搜索 二叉树】

LeetCode-94. 二叉树的中序遍历【栈 树 深度优先搜索 二叉树】 题目描述&#xff1a;解题思路一&#xff1a;递归解题思路二&#xff1a;迭代解题思路三&#xff1a;0 题目描述&#xff1a; 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1…

基于Python深度学习的中文情感分析系统(V2.0)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

信息安全就是国家安全,带大家了解一下安全算法

信息安全就是国家安全&#xff01; 今天这编文章就带大家了解一下安全算法吧&#xff0c;个人理解仅供参考&#xff01; 对安全算法 - 摘要算法的理解 摘要算法是一种将任意长度的数据转换为固定长度字节串的算法。它具有以下特点和应用。 首先&#xff0c;摘要算法能够生成…

详解Qt网络编程

Qt的网络编程能力非常强大&#xff0c;它提供了从底层socket API到高层HTTP、FTP等协议处理的完整解决方案。下面将简要介绍Qt中网络编程的核心类及其功能&#xff0c;并给出一些基本的使用示例。 核心网络类&#xff1a; QTcpSocket 和 QTcpServer QTcpSocket 是用于TCP通信的…

文件操作详解(三)--fsee -- ftell -- rewind -- feof函数 -- ferror函数

目录 一.文件的随机读写1.fseek2.ftell3.rewind 二.文件读写结束的判定1.feof函数&#xff08;不是用来判定文件结束的&#xff09;2.ferror函数 三.文件缓冲区 一.文件的随机读写 1.fseek int fseek(FILE* stream,long int offset,int origin); //第一个参数文件流 //第二个…

react组件:fragment

如果你要传递 key 给一个 &#xff0c;你不能使用 <>…</>&#xff0c;你必须从 ‘react’ 中导入 Fragment 且表示为…。 当你要从 <></> 转换为 [] 或 <></> 转换为 &#xff0c;React 并不会重置 state。这个规则只在一层深度的情况下…

excel统计分析——协方差分析的作用

参考资料&#xff1a;生物统计学 1、协变量与试验因素的区别 如果把协方差分析资料中的协变量看作多因素方差分析资料中的一个因素&#xff0c;则两类资料有相似之处&#xff0c;但两类资料有本质的不同。在方差分析中&#xff0c;各因素的水平时人为控制的&#xff0c;即使是…

学透Spring Boot — 004. Spring Boot Starter机制和自动配置机制

如果你项目中一直用的是 Spring Boot&#xff0c;那么恭喜你没有经历过用 Spring 手动集成其它框架的痛苦。 都说 Spring Boot 大大简化了 Spring 框架开发 Web 应用的难度&#xff0c;这里我们通过配置 Hibernate 的两种方式来深刻体会这一点&#xff1a; 使用 Spring 框架集…

【算法刷题day16】Leetcode:104. 二叉树的最大深度、111. 二叉树的最小深度、222.完全二叉树的节点个数

文章目录 Leetcode 104. 二叉树的最大深度解题思路代码总结 Leetcode 111. 二叉树的最小深度解题思路代码总结 Leetcode 222.完全二叉树的节点个数解题思路代码总结 草稿图网站 java的Deque Leetcode 104. 二叉树的最大深度 题目&#xff1a;104. 二叉树的最大深度 解析&#…

MT3017 上色

思路&#xff1a;使用分治&#xff0c;在每个连续区域递归调用heng()和shu() #include <bits/stdc.h> using namespace std; int n, m; int h[5005];int shu(int l, int r) {return r - l 1; } int heng(int l, int r) {int hmin 0x3f3f3f3f;for (int i l; i < r;…

IoT数采平台2:文档

IoT数采平台1&#xff1a;开篇IoT数采平台2&#xff1a;文档IoT数采平台3&#xff1a;功能IoT数采平台4&#xff1a;测试 【平台功能】 基础配置、 实时监控、 规则引擎、 告警列表、 系统配置 消息通知&#xff1a;Websocket 设备上线、设备下线、 数据变化、 告警信息、 实时…

蓝桥杯:全球变暖(python,BFS,DFS)(栈溢出的处理办法)

图论的经典题型&#xff0c;深度优先搜索和广度优先搜索都可以&#xff0c;但是本题推荐使用广度优先搜索&#xff08;类似的题最好都用广度优先搜索&#xff09;&#xff0c;因为使用深度优先搜索会爆栈&#xff08;栈溢出&#xff09;。本篇博客两种方法都进行讲解&#xff0…

【协议】RPC

文章目录 概述与web service/web api/wcf区别简介区别和联系 grpc.Net Core示例 参考 概述 与web service/web api/wcf区别 简介 RPC&#xff08;Remote Procedure Call Protocol&#xff09;即远程过程调用协议&#xff0c;是分布式系统间通信的一种协议。通过网络从远程计…