[补档][Tyvj 1518]CPU监控
[Tyvj 1518]CPU监控
题目
Bob需要一个程序来监视CPU使用率。这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事。Bob会干很多事,除了跑暴力程序看视频之外,还会做出去玩玩和用鼠标乱点之类的事,甚至会一脚踢掉电源……这些事有的会让做这件事的这段时间内CPU使用率增加或减少一个值;有的事还会直接让CPU使用率变为一个值。当然Bob会询问:在之前给出的事件影响下,CPU在某段时间内,使用率最高是多少。有时候Bob还会好奇地询问,在某段时间内CPU曾经的最高使用率是多少。为了使计算精确,使用率不用百分比而用一个整数表示。不保证Bob的事件列表出了莫名的问题,使得使用率为负………………INPUT
第一行一个正整数T,表示Bob需要监视CPU的总时间。然后第二行给出T个数表示在你的监视程序执行之前,Bob干的事让CPU在这段时间内每个时刻的使用率达已经达到了多少。第三行给出一个数E,表示Bob需要做的事和询问的总数。接下来E行每行表示给出一个询问或者列出一条事件:Q X Y:询问从X到Y这段时间内CPU最高使用率A X Y:询问从X到Y这段时间内之前列出的事件使CPU达到过的最高使用率P X Y Z:列出一个事件这个事件使得从X到Y这段时间内CPU使用率增加ZC X Y Z:列出一个事件这个事件使得从X到Y这段时间内CPU使用率变为Z时间的单位为秒,使用率没有单位。X和Y均为正整数(X<=Y),Z为一个整数。从X到Y这段时间包含第X秒和第Y秒。保证必要运算在有符号32位整数以内。OUTPUT
对于每个询问,输出一行一个整数回答。SAMPLE
INPUT
10-62 -83 -9 -70 79 -78 -31 40 -18 -520A 2 7A 4 4Q 4 4P 2 2 -74P 7 9 -71P 7 10 -8A 10 10A 5 9C 1 8 10Q 6 6Q 8 10A 1 7P 9 9 96A 5 5P 8 10 -53P 6 6 5A 10 10A 4 4Q 1 5P 4 9 -69OUTPUT
79-70-70-57910107979-51010
解题报告
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int inf=<<;
inline int read(){
int sum(),f();
char ch(getchar());
while(ch<''||ch>''){
if(ch=='-')
f=-;
ch=getchar();
}
while(ch>=''&&ch<=''){
sum=sum*+ch-'';
ch=getchar();
}
return sum*f;
}
int n,m;
int v[];
int padd[],pset[],pmx[];
int nadd[],nset[],nmx[];
inline int my_max(int a,int b){
return a>b?a:b;
}
inline void pushup(int i){
int l(i<<),r(l|);
pmx[i]=my_max(pmx[l],pmx[r]);
nmx[i]=my_max(nmx[l],nmx[r]);
}
inline void pushdown(int rt){
int ch(rt<<);
for(int i=;i<=;i++){
int nowch(ch+i);
pmx[nowch]=my_max(pmx[nowch],my_max(padd[rt]+nmx[nowch],pset[rt]));
if(nset[rt]==inf){
nmx[nowch]+=nadd[rt];
if(nset[nowch]==inf){
padd[nowch]=my_max(padd[nowch],nadd[nowch]+padd[rt]);
nadd[nowch]+=nadd[rt];
}
else{
pset[nowch]=my_max(pset[nowch],nset[nowch]+padd[rt]);
nset[nowch]=nmx[nowch];
}
}
else{
if(nset[nowch]==inf){
padd[nowch]=my_max(padd[nowch],nadd[nowch]+padd[rt]);
nadd[nowch]+=padd[rt];
}
else
pset[nowch]=my_max(pset[nowch],nmx[nowch]+padd[rt]);
nmx[nowch]=nset[rt];
nset[nowch]=nset[rt];
pset[nowch]=my_max(pset[rt],pset[nowch]);
}
}
nadd[rt]=;
padd[rt]=;
nset[rt]=inf;
pset[rt]=inf;
}
inline void build(int l,int r,int i){
padd[i]=;
pset[i]=inf;
nadd[i]=;
nset[i]=inf;
if(l==r){
pmx[i]=v[l];
nmx[i]=v[l];
return;
}
int lc(i<<),rc(lc|),mid((l+r)>>);
build(l,mid,lc);
build(mid+,r,rc);
pushup(i);
}
inline void update_set(int ll,int rr,int c,int l,int r,int i){
if(ll<=l&&r<=rr){
nset[i]=c;
nmx[i]=c;
pset[i]=my_max(pset[i],nset[i]);
pmx[i]=my_max(pmx[i],nmx[i]);
return;
}
pushdown(i);
int lc(i<<),rc(lc|),mid((l+r)>>);
if(ll<=mid)
update_set(ll,rr,c,l,mid,lc);
if(rr>mid)
update_set(ll,rr,c,mid+,r,rc);
pushup(i);
}
inline void update_add(int ll,int rr,int c,int l,int r,int i){
if(ll<=l&&r<=rr){
nmx[i]+=c;
pmx[i]=my_max(pmx[i],nmx[i]);
if(nset[i]==inf){
nadd[i]+=c;
padd[i]=my_max(padd[i],nadd[i]);
}
else{
nset[i]=nmx[i];
pset[i]=my_max(pset[i],nset[i]);
}
return;
}
pushdown(i);
int lc(i<<),rc(lc|),mid((l+r)>>);
if(ll<=mid)
update_add(ll,rr,c,l,mid,lc);
if(rr>mid)
update_add(ll,rr,c,mid+,r,rc);
pushup(i);
}
inline int query_p(int ll,int rr,int l,int r,int i){
if(ll<=l&&r<=rr)
return pmx[i];
pushdown(i);
int lc(i<<),rc(lc|),mid((l+r)>>);
int ret(inf);
if(ll<=mid)
ret=my_max(ret,query_p(ll,rr,l,mid,lc));
if(rr>mid)
ret=my_max(ret,query_p(ll,rr,mid+,r,rc));
return ret;
}
inline int query_n(int ll,int rr,int l,int r,int i){
if(ll<=l&&r<=rr)
return nmx[i];
pushdown(i);
int lc(i<<),rc(lc|),mid((l+r)>>);
int ret(inf);
if(ll<=mid)
ret=my_max(ret,query_n(ll,rr,l,mid,lc));
if(rr>mid)
ret=my_max(ret,query_n(ll,rr,mid+,r,rc));
return ret;
}
int main(){
n=read();
for(int i=;i<=n;i++)
v[i]=read();
/*for(int i=1;i<=n;i++)
cout<<v[i]<<' ';*/
build(,n,);
m=read();
char op[];
while(m--){
scanf("%s",op);
if(op[]=='Q'){
int x(read()),y(read());
printf("%d\n",query_n(x,y,,n,));
continue;
}
if(op[]=='A'){
int x(read()),y(read());
printf("%d\n",query_p(x,y,,n,));
continue;
}
if(op[]=='P'){
int x(read()),y(read()),z(read());
update_add(x,y,z,,n,);
continue;
}
if(op[]=='C'){
int x(read()),y(read()),z(read());
update_set(x,y,z,,n,);
continue;
}
}//while(1);
}
[补档][Tyvj 1518]CPU监控的更多相关文章
- bzoj3064 Tyvj 1518 CPU监控
Description Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看视频之外,还会做 ...
- 【bzoj3064】Tyvj 1518 CPU监控 线段树维护历史最值
题目描述 给你一个序列,支持4种操作:1.查询区间最大值:2.查询区间历史最大值:3.区间加:4.区间赋值. 输入 第一行一个正整数T,表示Bob需要监视CPU的总时间. 然后第二行给出T个数表示在你 ...
- Tyvj 1518 CPU监控(线段树)
题目描述: Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看视频之外,还会做出去玩玩和用 ...
- 3064: Tyvj 1518 CPU监控
注意这题要维护历史最大加和历史最大覆盖 /************************************************************** Problem: 3064 Us ...
- Tyvj 1518 CPU监控——极恶线段树
题目大意: 给定一个区间及其各个元素的初值,要求支持如下操作: 1.区间加 2.区间赋值 3.查询区间最大值 4.查询区间历史最大值 分析: 容易想到线段树,但是细思恶极(仔细想想恶心到了极点)的是, ...
- BZOJ3064 Tyvj 1518 CPU监控 线段树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3064 题意概括 一个序列,要你支持以下操作: 1. 区间询问最大值 2. 区间询问历史最大值 3. ...
- 2018.07.27 bzoj3064: Tyvj 1518 CPU监控(线段树)
传送门 线段树好题. 维护区间加,区间覆盖,区间最大,区间历史最大. 这个东西在国家集训队2016论文集之<区间最值操作与历史最值问题--杭州学军中学 吉如一>中讲的已经很详细了. 简单来 ...
- bzoj 3064: Tyvj 1518 CPU监控
Description 1.区间加 \(z\) 2.区间覆盖为 \(z\) 3.查询区间最大值 4.查询区间历史最大值 Solution 线段树维护历史最值,思想大致是维护标记出现过的最大值 考虑这种 ...
- [补档][Tyvj 1728]普通平衡树
[Tyvj 1728]普通平衡树 题目 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的 ...
随机推荐
- java 字符串全排列 和 去重
用递归进行排序 , 用TreeSet 去重. public class test { public static void main(String []args){ String str = &quo ...
- cache 和 buffer的区别
cache 和 buffer的区别: Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器.由于CPU的速度远高于主内存, CPU直接从内存中存取数据要等待一定时间周期,Cac ...
- 【Android Developers Training】 49. 轻松录制视频
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 用Eclipse的snippets功能实现代码重用
snippets功能实现代码重用 Snippets 代码片段是Eclipse的一个插件. 很多时候可以通过这个功能,重复使用常用的代码片段,加快开发效率. 创建一个代码段的步骤: 在Eclipse的e ...
- openssl ca(签署和自建CA)
用于签署证书请求.生成吊销列表CRL以及维护已颁发证书列表和这些证书状态的数据库.因为一般人无需管理crl,所以本文只介绍openssl ca关于证书管理方面的功能. 证书请求文件使用CA的私钥签署之 ...
- Python爬虫小白---(二)爬虫基础--Selenium PhantomJS
一.前言 前段时间尝试爬取了网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息.网易云音乐歌曲列表是通过iframe展示的,可以借助Selenium获取到iframe的页面元素, 而QQ音乐采用的是 ...
- javascript闭包的妙用——实现函数的重载
最近在看John Resig 与 Bear Bibeault的<JavaScript 忍者秘籍>.这本书处处提现了js的魔法(从我这个写强类型语言的人看来).js能够点石成金,处处体现着它 ...
- AddNewsServlet -servlet处理响应请求
package com.pb.news.web.servlet; import java.io.File;import java.io.IOException;import java.util.Dat ...
- [javascript 实践篇]——那些你不知道的“奇淫巧技”
1. 空(null, undefined)验证 刚开始,我是比较蠢的验证(我还真是这样子验证的) if (variable1 !== null || variable1 !== undefined | ...
- MySQL学习笔记(三)
--回顾 字段类型(列类型):数值型,时间日期型和字符串类型 数值型:整型和小数型(浮点型和定点型) 时间日期型:datetime,date,time,timestamp,year 字符串类型:定长, ...