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. securecrt切换会话(session)的显示方式

    Window(窗口)-> Tabs(选项卡)/Tile Vertically(垂直平铺)/Tile Horizontally(水平平铺)/Cascade(瀑布,如下图效果)

  2. python 3 直接使用reload函数报错

    reload()是python2 的内置函数可以直接使用,但是python3 直接使用此函数报错,需要导入importlib 模块 from importlib import reload

  3. PEAR DB 事务相关

    1.autoCommit().commit().rollback() function autoCommit($onoff=false) 指定是否自动提交事务.有的后端数据库不支持. function ...

  4. C++ 虚函数的内存分配

    1.无继承的普通类:   在有虚函数的情况下类会为其增加一个隐藏的成员,虚函数表指针,指向一个虚函数表,虚函数表里面就是类的各个虚函数的地址了.那么,虚函数表指针是以什么模型加入到类里面的,虚函数表里 ...

  5. nyoj 题目16 矩形嵌套

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a& ...

  6. Block层也是有IO的优先级的

    ---恢复内容开始--- 今天查看iotop的原理,竟然发现了IO优先级一说,IO是block层cfs调度器中的概念 block层也有一个类似于CPU的调度算法 对进程分成三个级别:RT,BE,IDL ...

  7. mysql5.6免安装配置(菜鸟版)

    mysql5.6免安装配置 MySQL5.6.13安装步骤(Windows7 32位) 1. 下载MySQL Community Server 5.6.13 2. 解压MySQL压缩包 将以下载的My ...

  8. 经典linux书籍

    入门篇<LINUX权威指南>书不错,写的很全面也比较广,涉及的不深,做为入门书籍不错,可以比较全面的了解linux .另外比较热门的也可以看看<鸟哥的私房菜>等书,偏管理类的书 ...

  9. DatacontractAttribute的使用规则

    关于DatacontractAttribute的使用规则和说明, DatacontractAttribute是序列化类的另一种方法,和XmlMemberAttribute(也就是XmlElementA ...

  10. 跳石头(NOIP2015) (二分查找)

    原题传送门 好久没更了..昨天去学zkw线段树,被zxyer狠狠地D了一顿.. 来补坑.. 这是一道很奇特的题目. 根据题目可以看出这道题有二分题具有的性质.. 不懂二分性质的可以看我以前的博客 传送 ...