洛谷 P2629 好消息,坏消息 题解
暴力算法的时间复杂度是O(n^2),考虑优化;
先导入一种思想——断环为链。说通俗点就是在原数组后面再接上下标为1——(n - 1)的元素;
以样例为例:-3 5 1 2;我们将其断环为链后可以得到这样的一维数组:-3 5 1 2 -3 5 1;
设其下标为1——7;当k=1时,判断下标1——4;当k=2时,判断下标2——5;当k=3时,判断下标3——6;当k=4时,判断下标4——7 结束;
断环为链后,题目要求就变为寻找k的个数,使k可以满足k——(n + k - 1)中,每个元素的对应的区间内前缀和都是非负的;
对此,我们在使用前缀和预处理后,就只需判断每个s[i] - s[k - 1] (k <= i <= n + k - 1)是否为负就可以;
既然这样,那么是否要判断k——n+k-1中每一个数的和呢?当然不是,因为其中如果只要有一个元素的对应的区间内前缀和是负的,那么这个k就是不符合的;
所以我们只需要判断一次———判断最小的s[i]减去s[k-1]是否为负。
总的来说:首先断环为链,其次前缀和处理,最后维护一个单调队列,找到最小的s[i],判断即可;
代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
int n,head=1,tail,ans;
long long a[2000001],s[2000001],q[2000001];
int main()
{
scanf("%d",&n);
for(register int i=1;i<=n;i+=1)
scanf("%lld",&a[i]);
for(register int i=1;i<=n-1;i+=1)
a[i+n]=a[i];
for(register int i=1;i<=2*n-1;i+=1)
s[i]=s[i-1]+a[i];
for(register int i=1;i<=2*n-1;i+=1)
{
while(head<=tail&&max(i-n+1,1)>q[head])head++;
while(head<=tail&&s[i]<=s[q[tail]])tail--;
q[++tail]=i;
if(i-n+1>0&&s[q[head]]-s[i-n]>=0)ans++;
}
printf("%d\n",ans);
return 0;
}
洛谷 P2629 好消息,坏消息 题解的更多相关文章
- 洛谷 P2629 好消息,坏消息
题目描述 uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一旦老板 ...
- 线段树【p2629】 好消息,坏消息
顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p2629 好消息,坏消息 历程 刚开始看到这个题,发现是需要维护区间和,满心欢喜敲了一通线段树,简单debug之后交上去 \ ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- 洛谷10月月赛II题解
[咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...
- [洛谷P1823]音乐会的等待 题解(单调栈)
[洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...
- 洛谷P2922 [USACO008DEC] 秘密消息Secret Message [Trie树]
洛谷传送门,BZOJ传送门 秘密消息Secret Message Description 贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息. 信息是二进制的,共有M(1≤M≤5 ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
随机推荐
- git-flow-avh的使用过程
安装: 在mac上 brew install git-flow-avh 使用: 在仓库中 git flow init 一路回车就行,这个命令相当于写入一些默认命令流程到.git中, 此命令执行之后会增 ...
- Jenkins 脚本命令行应用总结
Jenkins脚本命令行应用总结 测试环境 Jenkins 2.304 脚本命令行入口 Jenkins主页→系统管理→脚本命令行 遍历项目 例子:获取所有自由风格项目及相关项目信息 def proje ...
- MFC---视图和窗口
视类窗口 视类窗口是指程序运行后,显示信息的那一部分.对应的类是CTestOneView(TestOne表示项目名称)类,CTestOneView类是派生于CView类,而CView类又派生于CWnd ...
- python---两个栈实现一个队列
class Solution: """两个栈实现一个队列""" def __init__(self): # 接收栈 self.accept_ ...
- 利用java反射机制实现List>转化为List
BEGIN; 最近在用hibernate做项目,由于后续的业务功能比较多,然后框架原设计没有使用到一对多.一对一等特性,(艹TA妹)没办法,只能用原生sql语句获得需要的结果集.但是返回过来的是一个L ...
- Rancher无法登录 容器报错X509:certificate has expired or is not ye valid
在某天需要发布新版本的时候,发现rancher无法登录,于是到服务器上查看rancher日志,发现以下内容: 参考rancher文档中独立容器Rancher Server证书更新解决 1. 进入容器 ...
- Docker Compose 的介绍、安装与使用
什么是 Docker Compose? Compose 是 Docker 官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在 https://github.com/docker/com ...
- 【已解决】vscode窗口控制台闪现(不用更改原代码)
打开launch.json 将"type": "cppdbg"改为"type": "cppvsdbg" 会出现密钥ext ...
- 【Istio实际操作篇】Istio入门,10分钟快速安装
@ 目录 前言 本文说明 请大家务必查看 环境准备 详细版 入门:搭建步骤 Istio软件包下载 下载Istio 卸载 简洁版 安装 卸载 学习不走弯路,gz号「yeTechLog」 前言 上一篇讲了 ...
- 等了整整12年!Linux QQ昨天终于更新了!
一个执着于技术的公众号 前言 2020年4月1日,腾讯QQ Linux版迎来最新版发布,详细版本号为v2.0.0 Beta2.上一个版本v2.3.2发布于2019年10月24日,时隔160天又迎来了更 ...