BZOJ 3064 CPU监控
题目链接:CPU监控
学习一番线段树的历史标记~
这道题就是区间加法,区间赋值,要询问区间最大值 和 区间历史最大值的最大值。
然后这种题就是在现有标记的基础上多弄一套标记,维护这个点出现过的最大的标记。然后下传标记的时候注意要先传历史标记再传现在的标记。
王队告诉我说,关于历史标记,可以理解成每个节点有过很多标记,可以看成每个节点都有一个标记队列。这样的话,现在的标记就是在维护这个队列的最后一个,历史标记就是这个队列的\(max\)。所以传标记的时候需要先下传历史标记。
一定要把各种标记想清楚了再写。
下面贴代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define INF (-2147483647)
#define maxn 100010 using namespace std;
typedef long long llg; int n,m,L,R,_nm,_pm,z,_;
int nmax[maxn<<2],nadd[maxn<<2],ncov[maxn<<2];//现在的标记
int pmax[maxn<<2],padd[maxn<<2],pcov[maxn<<2];//历史标记 int getint(){
int w=0;bool q=0;
char c=getchar();
while((c>'9'||c<'0')&&c!='-') c=getchar();
if(c=='-') c=getchar(),q=1;
while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();
return q?-w:w;
} void update(int u){
nmax[u]=max(nmax[u<<1],nmax[u<<1|1]);
pmax[u]=max(pmax[u<<1],pmax[u<<1|1]);
} void pushdown(int u){
for(int i=0,v;i<2;i++){
v=u<<1|i;
pmax[v]=max(pmax[v],nmax[v]+padd[u]);
pmax[v]=max(pmax[v],pcov[u]);
if(ncov[v]==INF) padd[v]=max(padd[v],nadd[v]+padd[u]);
else pcov[v]=max(pcov[v],ncov[v]+padd[u]);
if(nadd[u]){
nmax[v]+=nadd[u];
if(ncov[v]==INF) nadd[v]+=nadd[u];
else ncov[v]+=nadd[u];
}
if(ncov[u]!=INF){
nmax[v]=ncov[u];
ncov[v]=ncov[u]; nadd[v]=0;
pcov[v]=max(pcov[v],pcov[u]);
}
}
padd[u]=nadd[u]=0,pcov[u]=ncov[u]=INF;
} void build(int u,int l,int r){
pcov[u]=ncov[u]=INF;
int lc=u<<1,lv=u<<1|1,mid=(l+r)>>1;
if(l==r) nmax[u]=pmax[u]=getint();
else build(lc,l,mid),build(lv,mid+1,r),update(u);
} void query(int u,int l,int r){
if(l!=r) pushdown(u);
if(l>=L && r<=R) _nm=max(_nm,nmax[u]),_pm=max(_pm,pmax[u]);
else{
int mid=(l+r)>>1;
if(L<=mid) query(u<<1,l,mid);
if(R>mid) query(u<<1|1,mid+1,r);
}
} void add(int u,int l,int r){
if(l!=r) pushdown(u);
if(l>=L && r<=R)
if(_) padd[u]=nadd[u]=z,pmax[u]=max(pmax[u],nmax[u]+=z);
else pcov[u]=ncov[u]=z,pmax[u]=max(pmax[u],nmax[u]=z);
else{
int mid=(l+r)>>1;
if(L<=mid) add(u<<1,l,mid);
if(R>mid) add(u<<1|1,mid+1,r);
update(u);
}
} int main(){
File("a");
n=getint(),build(1,1,n);
m=getint(); char c;
while(m--){
c=getchar();
while(c!='A' && c!='Q' && c!='P' && c!='C') c=getchar();
L=getint(); R=getint();
if(c=='Q' || c=='A'){
_nm=_pm=INF; query(1,1,n);
printf("%d\n",c=='Q'?_nm:_pm);
}
else{
z=getint(); _=c=='P';
add(1,1,n);
}
}
return 0;
}
BZOJ 3064 CPU监控的更多相关文章
- BZOJ.3064.CPU监控(线段树 历史最值)
题目链接 \(Description\) 有一个长为n的序列Ai,要求支持查询[l,r]的最值.历史最值,区间加/重设 \(Solution\) 线段树,每个点再维护一个历史(从0到现在)最大值.历史 ...
- 【BZOJ3064】CPU监控(线段树)
[BZOJ3064]CPU监控(线段树) 题面 BZOJ 洛谷 题解 神仙\(zsy\)出在了\(noip\)模拟的题目.(然而\(zsy\)出的还是这题的升级版) 首先明确一点,这题是一个吉司机线段 ...
- C#实现对远程服务器的内存和CPU监控
C#实现对远程服务器的内存和CPU监控小记 1. 主要使用到的组件有System.Management.dll 2. 主要类为 :ManagementScope 连接远程服务器示例代码: priv ...
- Linux CPU监控指标
Linux CPU监控指标 Linux提供了非常丰富的命令可以进行CPU相关数据进行监控,例如:top.vmstat等命令.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执 ...
- [补档][Tyvj 1518]CPU监控
[Tyvj 1518]CPU监控 题目 Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看 ...
- CPU监控 解题报告
CPU监控 这种题就需要小黄鸭调试法,不行就重构,动态gdb可能会死人,一堆tag的... 维护历史最值的一个核心是历史最值tag,它的意义是从上一次这个点下放tag之后到当前时刻的这个点的tag达到 ...
- 安卓app测试之cpu监控
安卓app测试之cpu监控,如何获取监控的cpu数据呢? 一.通过Dumpsys 来取值 1.adb shell dumpsys cpuinfo 二.top 1.top -d 1|grep packa ...
- 轻量级监控平台之cpu监控
轻量级监控平台之cpu监控脚本 #!/bin/bash #进程监控脚本 #功能需求: 上报机器的硬件层面-cpu负载数据 . /etc/profile . ~/.bash_profile pushur ...
- [BZOJ3064][Tyvj1518] CPU监控
题目:[BZOJ3064][Tyvj1518] CPU监控 思路: 线段树专题讲的.以下为讲课时的课件: 给出序列,要求查询一些区间的最大值.历史最大值,支持区间加.区间修改.序列长度和操作数< ...
随机推荐
- ELK平台介绍
在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自:http://baidu.blog.51cto.com/71938/1676798 日志主要包括系统日志.应用程序日志和安全 ...
- OC开发_Storyboard——多线程、UIScrollView
一.多线程 1.主队列:处理多点触控和所有UI操作(不能阻塞.主要同步更新UI) dispatch_queue_t mainQueue = dispatchg_get_main_queue(); // ...
- Redis快速起步及Redis常用命令大全
本系列教程内容提要 Java工程师之Redis实战系列教程教程是一个学习教程,是关于Java工程师的Redis知识的实战系列教程,本系列教程均以解决特定问题为目标,使用Redis快速解决在实际生产中的 ...
- 170721、springboot编程之注解(annotation)列表
(1)@SpringBootApplication 申明让spring boot自动给程序进行必要的配置,这个配置等同于: @Configuration ,@EnableAutoConfigurati ...
- yii2设置发送邮件的一些配置
错误提示: Warning: stream_socket_enable_crypto(): this stream does not support SSL/crypto in C:\xampp\ht ...
- 2.06StuModify.aspx(修改姓名,性别,所在班级)
meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title ...
- 用了快1年的MacBook Pro遇到的硬件问题
去年11月7日买的MacBook Pro,到目前快1年了,遇到了3个硬件问题(之前用了5年的Thinkpad在5年内未出现任何硬件问题): 1. 有一次MacBook放在背包中,背包拎在手上落在地上, ...
- 实现VMware下CentOS和Windows之间的复制粘贴
实现VMware下CentOS和Windows之间的复制粘贴1.第一步,打开虚拟机2.点击菜单栏中的虚拟机->安装VMware Tools3.桌面中找到VMwareTools-10.0.10-4 ...
- 您好,前端使用https,后端使用https是会有冲突的情况,所以默认后端都是http 负载均衡即可管理证书,不需要在后端ECS上绑定证书。
您前端使用https,那么前端就是加密的,后端使用https就是会访问出现问题的,目前阿里云负载均衡默认的配置前端使用https,后端默认就是http,也是无法更改的. 前端使用https,目前只有一 ...
- JIRA licence crack and etc
https://my.oschina.net/u/199525/blog/313788 http://blog.csdn.net/joinandjoin/article/details/9052785 ...