題意:給乙個字串中,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 ...