2 5 2 bwbwb 0 0 4 0 1 3 5 5 wbwbw 0 0 4 0 0 2 0 2 4 1 2 b 0 0 4
Case 1: 1 1 Case 2: 2 1 1 0
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
const int N = 50001;
int n,m;
int c[N];
char str[N];
int lowbit(int x){
return x&(-x);
}
int getsum(int x){
int s = 0;
while(x>0){
s += c[x];
x -= lowbit(x);
}
return s;
}
void add(int x,int y){
while(x<=n){
c[x] += y;
x += lowbit(x);
}
}
int main(){
int T;
scanf("%d",&T);
int k = 0;
while(T--){
memset(c,0,sizeof(c));
memset(str,0,sizeof(str));
printf("Case %d:\n",++k);
scanf("%d%d",&n,&m);
scanf("%s",str);
for(int i=1;i<n-1;i++){
if(str[i-1] == 'w' && str[i] == 'b' && str[i+1] == 'w'){
add(i,1);
}
}
int x,y,z;
char ss[10];
while(m--){
scanf("%d",&x);
if(x == 1){
scanf("%d%s",&y,ss);
if(ss[0] == 'b'){
if(y-1>=0 && y+1<n && str[y] == 'w' && str[y-1] == 'w' && str[y+1] == 'w'){
add(y,1);
}
if(y-2>=0 && str[y-1] == 'b' && str[y] == 'w' && str[y-2] == 'w'){
add(y-1,-1);
}
if(y+2<n && str[y] == 'w' && str[y+1] == 'b' && str[y+2] == 'w'){
add(y+1,-1);
}
}else if(ss[0] == 'w'){
if(y-1>=0 && y+1<n && str[y] == 'b' && str[y-1] == 'w' && str[y+1] == 'w'){
add(y,-1);
}
if(y-2>=0 && str[y] == 'b' && str[y-1] == 'b' && str[y-2] == 'w'){
add(y-1,1);
}
if(y+2<n && str[y] == 'b' && str[y+1] == 'b' && str[y+2] == 'w'){
add(y+1,1);
}
}
str[y] = ss[0];
}else{
scanf("%d%d",&y,&z);
if(z-y<=1){
printf("0\n");
continue;
}
int sum1 = getsum(y);
int sum2 = getsum(z-1);
printf("%d\n",sum2 - sum1);
}
}
}
return 0;
}版权声明:本文为博主原创文章,如有特殊需要请与博主联系 QQ : 793977586。
原文:http://blog.csdn.net/yeguxin/article/details/47782623