BZOJ3064 CPU監控(線段樹)

2021-08-26 05:51:29 字數 2606 閱讀 1777

bzoj

洛谷神仙zs

y zsy

出在了no

ipn oi

p模擬的題目。(然而zs

y zsy

出的還是這題的公升級版)

首先明確一點,這題是乙個吉司機線段樹。

如果只有區間加法,區間賦值,區間最大值,那麼這題很簡單。

但是加上了乙個區間歷史最值,這就很煩了。

於是我們就有了乙個神仙做法,

定義乙個表示(a

,b) (a,

b)

表示區間內所有數先+a

+ a再和

b b

取max' role="presentation" style="position: relative;">max

max,即

x=ma

x(x+

a,b)

x =m

ax(x

+a,b

)那麼這樣一來,區間加法轉化成(a

,−∞)

( a,

−∞

),區間賦值變成了(−

∞,b)

( −∞

,b

)考慮如何合併標記,現在有兩個標記(a

,b),

(x,y

) (a,

b),(

x,y)

,將後者合併到前者上去。

那麼可以將標記轉化成(a

+x,m

ax(b

+x,y

))( a+

x,ma

x(b+

x,y)

),原因就是注意一下ma

x max

和加法的先後順序。

對於兩個標記如何合併ma

x max

,是(m

ax(a

,x),

max(

b,y)

) (ma

x(a,

x),m

ax(b

,y))

。原因就是我們可以把這個標記看做是乙個分段函式,那麼這個合併就比較顯然了。

回到題目。

這題到底在幹什麼呢?

首先對於維護當前值,這個東西是非常顯然的。

考慮如何維護乙個歷史最值,我們對於每個點額外維護乙個歷史最值的標記,每次覆蓋的時候不會覆蓋掉歷史最值的標記,只會用ma

x max

操作更新歷史最值標記。

這樣子似乎就可以做了。

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define max 100100

#define lson (now<<1)

#define rson (now<<1|1)

#define inf 1050000000

inline

int read()

struct data

int calc(int x)

}mxt[max<<2],tag[max<<2];

int mx[max<<2],nw[max<<2];

data max(data a,data b);}

data operator+(data a,data b);}

void pushup(int now)

void puttag(int now,data a,data b)

void pushdown(int now)

void build(int now,int l,int r)

int mid=(l+r)>>1;

build(lson,l,mid);build(rson,mid+1,r);

pushup(now);

}void modify(int now,int l,int r,int l,int r,data a)

int mid=(l+r)>>1;pushdown(now);

if(l<=mid)modify(lson,l,mid,l,r,a);

if(r>mid)modify(rson,mid+1,r,l,r,a);

pushup(now);

}int query(int now,int l,int r,int l,int r,int opt)

int n,m;

char ch[20];

int main()

; if(ch[0]=='q')printf("%d\n",query(1,1,n,l,r,0));

else

if(ch[0]=='a')printf("%d\n",query(1,1,n,l,r,1));

else

if(ch[0]=='p')a.a=read(),modify(1,1,n,l,r,a);

else a.b=read(),modify(1,1,n,l,r,a);

}return

0;}

監控cpu 記憶體

pid 1 獲取程序pid echo pid interval 1 設定採集間隔 while true do echo date y m d h m s proc memlog.txt cat proc pid status grep e vmrss proc memlog.txt 獲取記憶體占用 ...

CPU監控分析

名稱 初始安裝 說明uptime 顯示系統執行時間和cpu負載情況 top 可以實時動態地檢視系統的整體運 況 htop top高階版 mpstat 多核cpu效能分析工具,實時檢視每個cpu的效能指標,以及所有cpu的平均指標 vmstat 檢視系統的整體使用情況 iostat 檢視cpu和磁碟i...

CPU實時監控mpstat

mpstat是multiprocessor statistics的縮寫,是實時系統監控工具。其報告與cpu的一些統計資訊,這些資訊存放在 proc stat檔案中。在多cpus系統裡,其不但能檢視所有cpu的平均狀況資訊,而且能夠檢視特定cpu的資訊。mpstat最大的特點是 可以檢視多核心cpu中...