题目链接: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. 【BZOJ3362-3365】USACO水题四连A

    [BZOJ3362][Usaco2004 Feb]Navigation Nightmare 导航噩梦 Description     农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤ ...

  2. 微信小程序 --- 设置页面的标题

    第一种方式:修改 page.json文件 { "navigationBarTitleText": "豆瓣 - 电影" } 第二种方式:使用 JS 修改: wx. ...

  3. Spring MVC 框架学习

    一.spirng的简介 Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情. ...

  4. mysql-sql高级应用

    sql语言进阶 典型操作 order by - select * from play_list order by createtime; - select * from play_list order ...

  5. ubuntu16.04下安装pcl点云库

    安装依赖项 sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get insta ...

  6. rk3188 公板调试记录

    打开ccache后编译android果然快很多. make rk3188_sdk_defconfig 触摸屏有问题,然后再吧input底下的touchscreen 屏蔽掉     james@jame ...

  7. 设计模式之——Decorator模式

    Decorator模式又叫装饰者模式,这种模式是为了满足Java开发的"面向扩展开放,面向修改闭源"的开发原则设计出来的. 在装饰者模式中,不修改源类的代码,却能修改源类中方法的功 ...

  8. HTTP cookies 详解(国外一位大牛的文章)

    原文:http://blog.csdn.net/lijing198997/article/details/9378047 HTTP cookies,通常又称作"cookies",已 ...

  9. 爬虫Scrapy框架

    安装scrapy 在安装过程中报错:解决方案 通过在https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted,然后下载: CP后是python 版本,32 ...

  10. 通过html<map>标签给图片加链接

    前面我们有谈到了通过图片定位给一张图片添加多个链接,现在用另外一种方法来实现,用html<map>标签给图片加链接 <img src="/images/hlj.jpg&qu ...