z

你没有发现两个字里的blog都不一样嘛 qwq

题目描述-->p2629 好消息,坏消息

历程

刚开始看到这个题,发现是需要维护区间和,满心欢喜敲了一通线段树,简单debug之后交上去 \(45pts\)?

改代码的时候开始考虑这样做的正确性.

维护区间和,前后两个的区间和加起来一定等于整个区间的区间和,那我和直接求和有什么区别?

再次读题

发现必须要求每一个时刻老板的怒气值都\(\geq 0\)才行.

xjb分析

既然维护区间和行不通,考虑改变线段树所维护的东西.

考虑维护些什么?

我们需要维护一个区间的最小值,才能判断是否满足\(\geq 0\)

而某一个位置的值,受前面位置的值的影响.

因此我们想到了前缀和.

即我们可以维护前缀和的最小值.

解决85%

既然想到了维护前缀和,那这样就很简单了.

根据题目所叙述的,我们需要从 \(k,k_1,k_2 \dots n,1,2 \dots k-1\)累加

所以我们要先判断后缀的最小值是否\(\leq 0\)

显然,我们的前缀和的计算为\(sum_i=\sum_{j=1}^{i}a_i\)

后缀部分\(\sum_{i=k}^{n}a_i\)的计算要减去\(sum_{k-1}\)

又因为题目要求的计算顺序,我们需要考虑后缀和与前缀最小值的和是否\(\geq 0\)

所以很容易写出这部分的代码

	for(R int i=2;i<=n;i++)
{
if(query(1,1,n,i,n)-sum[i-1]<0)continue;
if(sum[n]-sum[i-1]+query(1,1,n,1,i-1)>=0)
ans++;
}

看到上面的\(85\)%了没?

如果只单纯判断这些情况的话只能get到\(85pts\)

考虑被遗忘的情况

检查一番,我们发现题目中这一句话

uim必须按照时间的发生顺序逐条将消息告知给老板

突然醒悟

我们还可以从\(1\)到\(n\)告诉老板!

再加上判断是否整个区间的前缀最小值\(\leq 0\)即可.

综上,我们的问题就得以解决了!

---------------------代码---------------------

#include<bits/stdc++.h>
#define R register
#define N 1000008
#define ls o<<1
#define rs o<<1|1
using namespace std;
int tr[N<<2],ans,n,sum[N];
inline void up(int o){tr[o]=min(tr[ls],tr[rs]);return;};
void build(int o,int l,int r)
{
if(l==r)
{
tr[o]=sum[l];
return;
}
int mid=(l+r)>>1;
build(ls,l,mid);
build(rs,mid+1,r);
up(o);
}
int query(int o,int l,int r,int x,int y)
{
if(x<=l and y>=r)return tr[o];
int mid=(l+r)>>1,res=2147483647;
if(x<=mid)res=min(res,query(ls,l,mid,x,y));
if(y>mid)res=min(res,query(rs,mid+1,r,x,y));
return res;
}
int main()
{
scanf("%d",&n);
for(R int i=1,x;i<=n;i++)scanf("%d",&x),sum[i]=sum[i-1]+x;
build(1,1,n);
for(R int i=2;i<=n;i++)
{
if(query(1,1,n,i,n)-sum[i-1]<0)continue;
if(sum[n]-sum[i-1]+query(1,1,n,1,i-1)>=0)
ans++;
}
printf("%d",ans+(tr[1]>=0));
}

线段树【p2629】 好消息,坏消息的更多相关文章

  1. 【洛谷】【前缀和+st表】P2629 好消息,坏消息

    [题目描述:] uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一 ...

  2. 单调队列练习题解(切蛋糕&好消息,坏消息)

    单调队列的练习题解 前言: 在上一篇学习记录中,单调队列给出了几道练习题,因为这两道题的算法以及思路相差无几(几乎可以算是双倍经验quq),所以就在这里集中写一下相关的题解 前置知识: 见:队列专题( ...

  3. 【BZOJ3207】花神的嘲讽计划I 可持久化线段树/莫队

    看到题目就可以想到hash 然后很自然的联想到可持久化权值线段树 WA:base取了偶数 这道题还可以用莫队做,比线段树快一些 可持久化线段树: #include<bits/stdc++.h&g ...

  4. BZOJ 3207: 花神的嘲讽计划Ⅰ( hash + 可持久化线段树 )

    O(NK)暴力搞出所有子串的哈希值, 然后就对哈希值离散化建权值线段树, 就是主席树的经典做法了.总时间复杂度O(NK+(N+Q)logN) ----------------------------- ...

  5. 线段树(hdu 2795)

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. [转载]完全版线段树 by notonlysuccess大牛

    原文出处:http://www.notonlysuccess.com/ (好像现在这个博客已经挂掉了,在网上找到的全部都是转载) 今天在清北学堂听课,听到了一些很令人吃惊的消息.至于这消息具体是啥,等 ...

  7. BZOJ4946[Noi2017]蔬菜——线段树+堆+模拟费用流

    题目链接: [Noi2017]蔬菜 题目大意:有$n$种蔬菜,每种蔬菜有$c_{i}$个,每种蔬菜每天有$x_{i}$个单位会坏掉(准确来说每天每种蔬菜坏掉的量是$x_{i}-$当天这种蔬菜卖出量), ...

  8. LOJ#510 北校门外的回忆(找性质+倍增+线段树)

    这题一场模拟赛我们出了弱化版(n<=1e6),抄题面给的程序能拿到71分的好成绩 其实后面的29分是加了几个1e9的数据卡人 这糟老头子真是坏得很 正解我们机房看了三天 在这里感谢这篇题解的作者 ...

  9. 洛谷P5111 zhtobu3232的线段树

    题意:给定线段树,上面若干个节点坏了,求能表示出多少区间. 区间能被表示出当且仅当拆出来的log个节点都是好的. 解:每个区间在最浅的节点处计算答案. 对于每个节点维护从左边过来能有多少区间,从右边过 ...

随机推荐

  1. USACO Section1.3 Combination Lock 解题报告

    combo解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  2. python学习笔记二:流程控制

    一.if else: #!/usr/bin/python x = int(raw_input('please input:')) if x >= 90: if x >= 95: print ...

  3. Python 3基础教程2-打印语句和字符串

    本文介绍Python 3中的打印语句和字符串使用,具体练习请看下面的demo.py print ('Hello Python 3!') """文本讲打印语句和字符串打印语 ...

  4. 孤荷凌寒自学python第二十一天初识python的类

    孤荷凌寒自学python第二十一天初识python的类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 类是面向对象的编程语言非常重要的概念. 编程语言的进化史中从顺序编程到结构化编程,最后才 ...

  5. 机器学习框架Tensorflow数字识别MNIST

    SoftMax回归  http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92 我们的训练集由  个已标记的样本构成: ,其 ...

  6. [oldboy-django][2深入django]点击刷新验证码

    # 点击更新验证码,只要重新在发送一个请求即可 <img src="/check_code/" onclick="updateCode(this);" w ...

  7. 团队项目-第三次scrum 会议

    时间:10.25 时长:30分钟 地点:线上 工作情况 团队成员 已完成任务 待完成任务 解小锐 根据初步讨论结果编写初步的api文档 编写project和projectGenerator类 陈鑫 采 ...

  8. Access连接字符串

    Access2007没有密码连接: <connectionStrings> <add name="myconn" connectionString="P ...

  9. tcp slowstart (TCP 慢启动)

    tcp slowstart (TCP 慢启动) 慢启动定义 慢启动,是传输控制协议使用的一种拥塞控制机制.慢启动也叫做指数增长期.慢启动是指每次TCP接收窗口收到确认时都会增长.增加的大小就是已确认段 ...

  10. [poj] 1149 PIGS || 最大流经典题目

    原题 题目大意 给你m个猪圈以及每个猪圈里原来有多少头猪,先后给你n个人,每个人能打开一些猪圈并且他们最多想买Ki头猪,在每一个人买完后能将打开的猪圈中的猪顺意分配在这次打开猪圈里,在下一个人来之前 ...