hdu 4046 樹狀陣列 2023年預選網路賽

2021-06-08 17:07:44 字數 745 閱讀 8893

題意:給乙個字串中,0:l,r為l到r之間有多少個連續的wbw,可以重疊。1:p,ch為在字串中的p位置改為ch。n為字串的長度,m為操作的次數。

思路:這道題沒能該出來很自責,因為很簡單。更改乙個佔位置最多隻影響到三個位置。每個位置代表從這位置開始往後連續的三個字元是否為"wbw"。用梳妝陣列統計就可以了。注意跟換之前和之後的變化關係。

#include #include #include using namespace std;

const int n=78000;

int c[n*2];

char str[n];

int n,m;

int lowbit(int a)

int getsum(int p)

void modify(int p,int c)

void solve(int p,char ch)

str[p]=ch;

for(int i=p-2;i<=p;i++)//更換之後

}int main()

{ int cas;

scanf("%d",&cas);

int t=0;

while(cas--)

{scanf("%d%d",&n,&m);

scanf("%s",str);

int len=strlen(str);

memset(c,0,sizeof(c));

if(len>=3)

for(int i=0;i

hdu 4046 探查wbw組合數 線段樹

只要明白下區間如何更新上區間就可以了,左區間和右區間中只能 可能是右區間右邊界中有 w 然後右區間左邊界有 b w 或者是右區間左邊界有 w 左區間右邊界有 w b 滿足這個情況下面,才可能上面的區間wbw組合增多。所以只要明白這個就ok了。view code 1 include2 include3...

hdu 3887 樹狀陣列

給你一棵樹,每個節點都有個編號。讓你求乙個節點他的子樹中編號比他小的節點有幾個。編號唯一,從1 n,已給出根節點 解 樹狀陣列統計。轉化為線性序列。可以想到的是,若要統計乙個節點,那麼比它小的孩子必須先插完,然後統計就行了。對於乙個節點i來說,只要把所有x那麼對於所有節點來說也是這樣的,從一開始插,...

hdu 3333 樹狀陣列

此題與3743相仿,但本題資料較大,需要用到離散化。如何去掉重複元素呢?採用離線演算法 首先將詢問按右端點從小到大排序,離線處理時,記錄每個元素所在位置,遇到重複元素時,從它之前出現的位置減去這個元素,這樣就是的每個元素總是出現在最後。include include include include ...