線段樹單點修改+查詢最大子段和
一邊寫對?
只不過忘了改陣列大小沒看到x
>
yx>y
x>y而已
維護區間和w
ww,區間最大子段和f
ff,從左端點開始的最大子段和lflf
lf,從右端點開始的最大子段和rfrf
rfw
ww照樣維護,f
ff取左兒子和右兒子的max
maxma
x,還要和左兒子的rf+
rf+rf
+右兒子的lflf
lf取m ax
maxma
x,lflf
lf對左兒子的lflf
lf和 左兒子的w+w+
w+右兒子的lflf
lf取m ax
maxma
x,rfrf
rf對右兒子的rfrf
rf和 右兒子的w+w+
w+右兒子的rfrf
rf取m ax
maxma
x,這樣簡單維護起來就好,查詢的時候一樣
#include
#define a 2000010
using
namespace std;
typedef
long
long ll;
struct node tree[a]
;int n, m, opt, a, b;
voidup(
int k)
void
build
(int k,
int l,
int r)
int m =
(l + r)
>>1;
build
(k <<
1, l, m)
;build
(k <<1|
1, m +
1, r);up
(k);
}void
change
(int k,
int pos,
int val)
int m =
(tree[k]
.l + tree[k]
.r)>>1;
if(pos <= m)
change
(k <<
1, pos, val)
;else
change
(k <<1|
1, pos, val);up
(k);
}node ask
(int k,
int l,
int r)
if(l <= m)
return
ask(k <<
1, l, r);if
(r > m)
return
ask(k <<1|
1, l, r);}
intmain
(int argc,
char
const
*ar**)
return0;
}
245 你能回答這些問題嗎
解題思路 由於我們想要logn的時間複雜的情況下得到詢問的答案,並且還要進行修改,為了不超時所以想到了使用線段樹去求最大連續子串行和。線段樹本身是用到了分治的思想,那麼如果用線段樹,我們需要用道哪些東西才能得到正確的答案呢?因為是線段樹,所以我們每乙個序列都需要分成2個子序列。那麼如果我們吧乙個序列...
你能回答這些問題嗎 線段樹
題目 給定長度為n的數列a,以及m條指令,每條指令可能是以下兩種之一 1 1 x y 查詢區間 x,y 中的最大連續子段和,即 2 2 x y 把 a x 改成 y。對於每個查詢指令,輸出乙個整數表示答案。輸入格式 第一行兩個整數n,m。第二行n個整數a i 接下來m行每行3個整數k,x,y,k 1...
面試,你回答過這些提問嗎?
面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...