题目链接: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监控的更多相关文章

  1. BZOJ.3064.CPU监控(线段树 历史最值)

    题目链接 \(Description\) 有一个长为n的序列Ai,要求支持查询[l,r]的最值.历史最值,区间加/重设 \(Solution\) 线段树,每个点再维护一个历史(从0到现在)最大值.历史 ...

  2. 【BZOJ3064】CPU监控(线段树)

    [BZOJ3064]CPU监控(线段树) 题面 BZOJ 洛谷 题解 神仙\(zsy\)出在了\(noip\)模拟的题目.(然而\(zsy\)出的还是这题的升级版) 首先明确一点,这题是一个吉司机线段 ...

  3. C#实现对远程服务器的内存和CPU监控

    C#实现对远程服务器的内存和CPU监控小记 1.  主要使用到的组件有System.Management.dll 2.  主要类为 :ManagementScope 连接远程服务器示例代码: priv ...

  4. Linux CPU监控指标

    Linux CPU监控指标 Linux提供了非常丰富的命令可以进行CPU相关数据进行监控,例如:top.vmstat等命令.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执 ...

  5. [补档][Tyvj 1518]CPU监控

    [Tyvj 1518]CPU监控 题目 Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看 ...

  6. CPU监控 解题报告

    CPU监控 这种题就需要小黄鸭调试法,不行就重构,动态gdb可能会死人,一堆tag的... 维护历史最值的一个核心是历史最值tag,它的意义是从上一次这个点下放tag之后到当前时刻的这个点的tag达到 ...

  7. 安卓app测试之cpu监控

    安卓app测试之cpu监控,如何获取监控的cpu数据呢? 一.通过Dumpsys 来取值 1.adb shell dumpsys cpuinfo 二.top 1.top -d 1|grep packa ...

  8. 轻量级监控平台之cpu监控

    轻量级监控平台之cpu监控脚本 #!/bin/bash #进程监控脚本 #功能需求: 上报机器的硬件层面-cpu负载数据 . /etc/profile . ~/.bash_profile pushur ...

  9. [BZOJ3064][Tyvj1518] CPU监控

    题目:[BZOJ3064][Tyvj1518] CPU监控 思路: 线段树专题讲的.以下为讲课时的课件: 给出序列,要求查询一些区间的最大值.历史最大值,支持区间加.区间修改.序列长度和操作数< ...

随机推荐

  1. 【BZOJ4195】[Noi2015]程序自动分析 并查集

    [BZOJ4195][Noi2015]程序自动分析 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3 ...

  2. 【BZOJ1630/2023】[Usaco2007 Demo]Ant Counting DP

    [BZOJ1630/2023][Usaco2007 Demo]Ant Counting 题意:T中蚂蚁,一共A只,同种蚂蚁认为是相同的,有一群蚂蚁要出行,个数不少于S,不大于B,求总方案数 题解:DP ...

  3. 监控linux流量shell版

    想要实时查看linux流量情况,又不想再去下第三方工具,可以直接写脚步运行! 系统:centos 6.5 原理:从/proc/net/dev中获取到流量情况,再通过换算并除以间隔时间来得到流量单位M ...

  4. java启动3个线程轮流打印数字

    转自:http://blog.csdn.net/u014011112/article/details/50988769 http://blog.csdn.net/perrywork/article/d ...

  5. Apache的配置详解,最好的Apache配置文档

    http://blog.csdn.net/apple_llb/article/details/50253889 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.c ...

  6. Linux服务器报错too many open files错误解决方案

    1.本质解决方案按照oracle的安装脚本中以下几项文件进行相应配置: cp /etc/security/limits.conf /etc/security/limits.conf.bak echo ...

  7. sqlserver如何读写操作windows系统的文件

    DECLARE   @object   int     DECLARE   @hr   int     DECLARE   @src   varchar(255),   @desc   varchar ...

  8. Python开发【项目】:博客后台

    概述 通过自己写的博客后台代码.思路,来与武sir的代码进行一个差异化的比较,记录之间的差距,改善以后写代码的思路 博客后台这个项目,对之前Django学习的各个知识点都有涉及到,非常重要 用户登录验 ...

  9. ASP.netMVC文件下载的几种方法

    第一种:最简单的超链接方法,标签的href直接指向目标文件地址,这样容易暴露地址造成盗链,这里就不说了 第二种:后台下载 在后台下载中又可以细分为几种下载方式 首先,在前台,我们需要一个标签 &quo ...

  10. SQL基础--查询之二--连接查询

    SQL基础--查询之二--连接查询