給你乙個字串,由』w』 和 『b』 組成,對該字串有兩種操作,當輸入為 0 a b 時,詢問區間[a,b] 內有多少個串為 「wbw」;
當輸入為 1 k ch 時,將下標為k的字元改為字元ch;
線段樹單點更新的題目,用線段樹來查詢這個區間有多少個 「wbw」。ac**當更新的時候,就用連續更新當前點和後面兩點,因為一次修改會修改後面兩個位置的」wbw」的個數。
#include
#include
#include
#define ls o*2
#define rs o*2+1
using
namespace
std;
const
int n = 50005;
char str[n];
int sumv[n<<2];
inline
void maintion(int o)
void build(int o, int l, int r)
int m = (l+r)/2;
build(ls, l, m);
build(rs, m+1, r);
maintion(o);
}int ql, qr;
char val;
int query(int o, int l, int r)
int m = (l+r)/2;
int ret = 0;
if(ql <= m) ret += query(ls, l, m);
if(qr > m) ret += query(rs, m+1, r);
return ret;
}void modify(int o, int l, int r) else
return ;
}int m = (l+r)/2;
if(ql <= m) modify(ls, l, m);
else modify(rs, m+1, r);
maintion(o);
}int main()
}else
if(k+2
< n) }}
}return
0;}
hdu 4046 探查wbw組合數 線段樹
只要明白下區間如何更新上區間就可以了,左區間和右區間中只能 可能是右區間右邊界中有 w 然後右區間左邊界有 b w 或者是右區間左邊界有 w 左區間右邊界有 w b 滿足這個情況下面,才可能上面的區間wbw組合增多。所以只要明白這個就ok了。view code 1 include2 include3...
hdu 預處理 線段樹)
給n個數,m個詢問,問任意區間內與其它數互質的數有多少個 比如3個數1 2 4,詢問 1,3 那麼答案是1 千萬要記住,這樣的題目,如果你不轉變下,使勁往線段樹想 雖然轉變之後,也說要用到線段樹,但是維護的東西不同了 那麼會發現這樣的題目,區間與區間之間是無法傳遞資訊的,區間與區間是無法傳遞資訊的,...
初步線段樹 hdu1166
include include includeusing namespace std define max 50000 struct node node maintree 4 max void settree int n,int l,int r int main printf case d n tt...