4927 線段樹練習5 多重標記

2022-05-03 09:42:07 字數 2176 閱讀 4266

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

題解檢視執行結果

有n個數和5種操作

add a b c:把區間[a,b]內的所有數都增加c

set a b c:把區間[a,b]內的所有數都設為c

sum a b:查詢區間[a,b]的區間和

max a b:查詢區間[a,b]的最大值

min a b:查詢區間[a,b]的最小值

輸入描述 input description

第一行兩個整數n,m,第二行n個整數表示這n個數的初始值

接下來m行操作,同題目描述

輸出描述 output description

對於所有的sum、max、min詢問,一行輸出乙個答案

樣例輸入 sample input

10 6

3 9 2 8 1 7 5 0 4 6

add 4 9 4

set 2 6 2

add 3 8 2

sum 2 10

max 1 7

min 3 6

樣例輸出 sample output

資料範圍及提示 data size & hint

10%:130%:1100%:1保證中間結果在long long(c/c++)、int64(pascal)範圍內

ps:由於資料6出錯導致某些人只有90分,已於2016.5.13修正。

出題人在此對兩位90分的使用者表示誠摯的歉意

分類標籤 tags 點此展開 

暫無標籤

#include#include

#define lc k<<1

#define rc k<<1|1

#define ll long long

using

namespace

std;

const ll n=2e5+5,z=n<<2

;ll n,m,a[n];

ll sum[z],mx[z],mn[z],tag[z],

set[z],add[z];

inline ll read()

while(ch>='

0'&&ch<='9')

return x*f;

}void

updata(ll k)

void pushdown(ll k,ll l,ll r)

if(tag[k])

}void

build(ll k,ll l,ll r)

ll mid=l+r>>1

; build(lc,l,mid);

build(rc,mid+1

,r);

updata(k);

}void

plusx(ll k,ll l,ll r,ll x,ll y,ll val)

pushdown(k,l,r);

ll mid=l+r>>1

;

if(y<=mid) plusx(lc,l,mid,x,y,val);

else

if(x>mid) plusx(rc,mid+1

,r,x,y,val);

else plusx(lc,l,mid,x,mid,val),plusx(rc,mid+1,r,mid+1

,y,val);

updata(k);

}void

reset(ll k,ll l,ll r,ll x,ll y,ll val)

pushdown(k,l,r);

ll mid=l+r>>1

;

if(y<=mid) reset(lc,l,mid,x,y,val);

else

if(x>mid) reset(rc,mid+1

,r,x,y,val);

else reset(lc,l,mid,x,mid,val),reset(rc,mid+1,r,mid+1

,y,val);

updata(k);

}ll qsum(ll k,ll l,ll r,ll x,ll y)

ll qmax(ll k,ll l,ll r,ll x,ll y)

ll qmin(ll k,ll l,ll r,ll x,ll y)

intmain()

return0;

}

4927 線段樹練習5

4927 線段樹練習5 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 檢視執行結果 題目描述 description 有n個數和5種操作 add a b c 把區間 a,b 內的所有數都增加c set a b c 把區間 a,b 內的所有數都設為c sum a b 查詢區...

4927 線段樹練習5

時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解檢視執行結果 有n個數和5種操作 add a b c 把區間 a,b 內的所有數都增加c set a b c 把區間 a,b 內的所有數都設為c sum a b 查詢區間 a,b 的區間和 max a b 查詢區間 a,b 的最...

線段樹練習5(codevs 4927)

題目描述 description 有n個數和5種操作 add a b c 把區間 a,b 內的所有數都增加c set a b c 把區間 a,b 內的所有數都設為c sum a b 查詢區間 a,b 的區間和 max a b 查詢區間 a,b 的最大值 min a b 查詢區間 a,b 的最小值 輸...