题目链接: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. 【BZOJ1176】[Balkan2007]Mokia/【BZOJ2683】简单题 cdq分治

    [BZOJ1176][Balkan2007]Mokia Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=1600 ...

  2. Oracle入门笔记 ——启动进阶

    1.2 进阶内容: 两个概念:SCN 和 检查点  1.SCN的定义:     system change member ,系统改变号,是数据库中非常重要的一个数据结构.     SCN 用以标示数据 ...

  3. 拼接的html的onclick事件中无法传递对象给js方法的处理办法

    如下: 拼接的html: " onclick=\"valDocName2('"+JSON.stringify(doc).replace(new RegExp(" ...

  4. java的this表示当前类还是当前实例?

    转自:http://www.runoob.com/java/java-basic-syntax.html this 表示调用当前实例或者调用另一个构造函数

  5. Comparable 与 Comparator的区别

    Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 ...

  6. 详探TextRange对象--查找与选择(转载)

    TextRange对象是动态HTML(DHTML)的高级特性,使用它可以实现很多和文本有关的任务,例如搜索和选择文本.文本范围让您可以选择性的将字符.单词和句子从文档中挑选出来.TextRange对象 ...

  7. JavaMVC框架之SpringMVC

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  8. HOJ 2226&POJ2688 Cleaning Robot(BFS+TSP(状态压缩DP))

    Cleaning Robot Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4264 Accepted: 1713 Descri ...

  9. 【mlflow】mlflow打包、启动、换用mysql backend、mysql配置

    mlflow是一个自动化机器学习平台,支持python2也支持python3 mlflow9.0添加了数据库作为tracking data的存储: https://github.com/mlflow/ ...

  10. CF1028E Restore Array 构造

    正解:构造 解题报告: 传送门! 是的灵巧还在写构造,,,不知道484我做题太慢的缘故我感觉我做了好久的构造了然而一半的题目都没做完QAQ 要哭出来了QAQ 然后说下这题的解法,开始花了这——么的时间 ...