AC日記 線段樹練習5 codevs 4927

2022-05-14 07:26:11 字數 2692 閱讀 4978

時間限制: 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分的使用者表示誠摯的歉意

思路:裸線段樹;

輕鬆ac;

來,上**:

#include #include 

#include

#define maxn 100001

#define ll long long

using

namespace

std;

struct

treenodetype ;

struct treenodetype tree[maxn<<2

];ll if_z,n,m;

char

cget;

inline

void read_int(ll &now)

while(cget>='

0'&&cget<='9'

)

now*=if_z;

}inline

void

tree_up(ll now)

inline

void

tree_down(ll now)

else

else

if(tree[now<<1|1

].if_)

else

}tree[now].flag=0,tree[now].flag_=0,tree[now].if_=false;}

void

tree_build(ll now,ll l,ll r)

tree[now].mid=(l+r)>>1

; tree_build(now

<<1

,l,tree[now].mid);

tree_build(now

<<1|1,tree[now].mid+1

,r);

tree_up(now);

}void

tree_change(ll now,ll l,ll r,ll x)

if(tree[now].flag||tree[now].if_) tree_down(now);

if(l>tree[now].mid) tree_change(now<<1|1

,l,r,x);

else

if(r<=tree[now].mid) tree_change(now<<1

,l,r,x);

else

tree_up(now);

}void

tree_change_(ll now,ll l,ll r,ll x)

if(tree[now].flag||tree[now].if_) tree_down(now);

if(l>tree[now].mid) tree_change_(now<<1|1

,l,r,x);

else

if(r<=tree[now].mid) tree_change_(now<<1

,l,r,x);

else

tree_up(now);

}ll tree_query(ll now,ll l,ll r,ll type)

if(tree[now].flag||tree[now].if_) tree_down(now);

tree_up(now);

if(l>tree[now].mid) return tree_query(now<<1|1

,l,r,type);

else

if(r<=tree[now].mid) return tree_query(now<<1

,l,r,type);

else

}int

main()

else

if(ch[0]=='s'

)

else

}else

if(ch[0]=='m'

)

else}}

return0;

}

線段樹練習5

閒話 今天調了一天的線段樹,結果一下午一道題都沒做qaq,現在一看到 就眼疼。感覺要很久才能恢復過來orz 不過這個題對於線段樹來說應該是個很好的模板題2333 有n個數和5種操作 add a b c 把區間 a,b 內的所有數都增加c set a b c 把區間 a,b 內的所有數都設為c sum...

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 的最...