時間限制: 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 的最...