3064: Tyvj 1518 CPU监控
来源:互联网 发布:清华java培训 编辑:程序博客网 时间:2024/05/16 01:47
3064: Tyvj 1518 CPU监控
Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 747 Solved: 292
[Submit][Status][Discuss]
Description
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使用率增加Z
C X Y Z:列出一个事件这个事件使得从X到Y这段时间内CPU使用率变为Z
时间的单位为秒,使用率没有单位。
X和Y均为正整数(X<=Y),Z为一个整数。
从X到Y这段时间包含第X秒和第Y秒。
保证必要运算在有符号32位整数以内。
Output
对于每个询问,输出一行一个整数回答。
Sample Input
-62 -83 -9 -70 79 -78 -31 40 -18 -5
20
A 2 7
A 4 4
Q 4 4
P 2 2 -74
P 7 9 -71
P 7 10 -8
A 10 10
A 5 9
C 1 8 10
Q 6 6
Q 8 10
A 1 7
P 9 9 96
A 5 5
P 8 10 -53
P 6 6 5
A 10 10
A 4 4
Q 1 5
P 4 9 -69
Sample Output
-70
-70
-5
79
10
10
79
79
-5
10
10
HINT
数据分布如下:
第1、2个数据保证T和E均小于等于1000
第3、4个数据保证只有Q类询问
第5、6个数据保证只有C类事件
第7、8个数据保证只有P类事件
全部数据保证T和E均小于等于100000
Source
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<vector>#include<queue>#include<set>#include<map>#include<stack>#include<bitset>#include<ext/pb_ds/priority_queue.hpp>using namespace std;const int maxn = 1E5 + 10;const int T = 4;typedef long long LL;const LL INF = 1E16;const char com[4] = {'Q','A','P','C'};int n,m;LL A[maxn*T],B[maxn*T],Add[maxn*T],Pa[maxn*T],Mark[maxn*T],Pm[maxn*T];int getint(){char ch = getchar(); int ret = 0,a = 1;while (ch < '0' || '9' < ch){if (ch == '-') a = -1;ch = getchar();}while ('0' <= ch && ch <= '9')ret = ret*10 + ch - '0',ch = getchar();return ret * a;}void Clear(int o) {Add[o] = Pa[o] = 0;Mark[o] = Pm[o] = -INF;}void maintain(int o){int lc = (o<<1),rc = (o<<1|1);A[o] = max(A[lc],A[rc]);B[o] = max(B[lc],B[rc]);}void Down(int o,LL AD,LL P){if (Pm[o] != -INF) Pm[o] = max(Pm[o],Mark[o] + P),Mark[o] += AD;else Pa[o] = max(Pa[o],Add[o] + P),Add[o] += AD;}void pushdown(int o,int l,int r){if (Add[o] == 0 && Mark[o] == -INF) return;B[o] = max(B[o],max(A[o] + Pa[o],Pm[o]));int lc = (o<<1),rc = (o<<1|1),mid = (l + r) >> 1;if (Add[o] != 0){A[o] += Add[o];if (l < r) Down(lc,Add[o],Pa[o]),Down(rc,Add[o],Pa[o]);}if (Mark[o] != -INF){A[o] = Mark[o];if (l < r){Mark[lc] = Mark[rc] = Mark[o];Pm[lc] = max(Pm[lc],Pm[o]);Pm[rc] = max(Pm[rc],Pm[o]);}}Clear(o);}void Build(int o,int l,int r){if (l == r){Clear(o); A[o] = B[o] = getint(); return;}int mid = (l + r) >> 1; Clear(o);Build(o<<1,l,mid); Build(o<<1|1,mid+1,r);maintain(o);}void Modify(int o,int l,int r,int ml,int mr,LL k,int typ){if (ml <= l && r <= mr){if (typ == 2){if (Pm[o] != -INF) Mark[o] += k,Pm[o] = max(Pm[o],Mark[o]);else Add[o] += k,Pa[o] = max(Pa[o],Add[o]);}else Mark[o] = k,Pm[o] = max(Pm[o],k);pushdown(o,l,r); return;}int mid = (l + r) >> 1; pushdown(o,l,r);if (ml <= mid) Modify(o<<1,l,mid,ml,mr,k,typ); else pushdown(o<<1,l,mid);if (mr > mid) Modify(o<<1|1,mid+1,r,ml,mr,k,typ); else pushdown(o<<1|1,mid+1,r);maintain(o);}LL Query(int o,int l,int r,int ql,int qr,int typ){pushdown(o,l,r);if (ql <= l && r <= qr) return !typ? A[o] : B[o];int mid = (l + r) >> 1; LL ret = -INF;if (ql <= mid) ret = Query(o<<1,l,mid,ql,qr,typ);if (qr > mid) ret = max(ret,Query(o<<1|1,mid+1,r,ql,qr,typ));return ret;}int getcom(){char ch = getchar();for (;;){for (int i = 0; i < 4; i++)if (ch == com[i]) return i;ch = getchar();}}int main(){#ifdef DMCfreopen("DMC.txt","r",stdin);#endifn = getint(); Build(1,1,n); m = getint();while (m--){int typ = getcom(),l,r;l = getint(); r = getint();if (typ == 0) printf("%lld\n",Query(1,1,n,l,r,0));else if (typ == 1) printf("%lld\n",Query(1,1,n,l,r,1));else if (typ == 2) Modify(1,1,n,l,r,getint(),2);else Modify(1,1,n,l,r,getint(),3);}return 0;}
- 3064: Tyvj 1518 CPU监控
- 【bzoj3064】【Tyvj 1518 CPU监控】
- BZOJ3064: Tyvj 1518 CPU监控
- bzoj 3064: Tyvj 1518 CPU监控 (线段树)
- [bzoj 3064] Tyvj 1518 CPU监控:线段树的Lazy tag
- BZOJ 3064 Tyvj 1518 CPU监控 线段树维护历史最大值
- bzoj 3064: Tyvj 1518 CPU监控 线段树维护历史最大值
- [bzoj3064]Tyvj 1518 CPU监控 线段树&排行榜垫底留念
- cpu 监控
- CPU监控
- 12.1.3 CPU监控
- python监控cpu
- Linux CPU 监控脚本
- 2 CPU 性能监控
- android 监控cpu
- cpu top监控脚本
- CPU 内存 磁盘监控
- 服务器性能监控--cpu
- 我的2016总结以及2017的计划
- 重力加速度和摇一摇事件
- 练习
- linux下VSFTP 530 Permission denied错误的解决办法
- 【九度】题目1096:日期差值
- 3064: Tyvj 1518 CPU监控
- Ubuntu新手-tar 解压缩命令详解
- C#中基于GDI+(Graphics)图像处理系列之图片压缩优化
- C#获取当前应用程序所在路径及环境变量
- shell脚本批量获取远程服务器多个项目的日志
- C控制语句:循环
- RxJava与Retrofit 结合请求后台数据并解析
- 记一篇关于android PopupWindow
- LDD之PCI设备