HDU 4046 Panda(線段樹單點更新)

2021-07-02 16:09:27 字數 1193 閱讀 7055

給你乙個字串,由』w』 和 『b』 組成,對該字串有兩種操作,

當輸入為 0 a b 時,詢問區間[a,b] 內有多少個串為 「wbw」;

當輸入為 1 k ch 時,將下標為k的字元改為字元ch;

線段樹單點更新的題目,用線段樹來查詢這個區間有多少個 「wbw」。

當更新的時候,就用連續更新當前點和後面兩點,因為一次修改會修改後面兩個位置的」wbw」的個數。

ac**

#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...