标签:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4046
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<cmath> 6 #include<algorithm> 7 #define inf 0x7fffffff 8 using namespace std; 9 typedef long long LL; 10 const int maxn=50000+10; 11 12 int n,m; 13 int c[maxn]; 14 char str[maxn]; 15 16 int lowbit(int u) {return u&(-u); } 17 void add(int i,int dd) 18 { 19 while (i<=maxn) 20 { 21 c[i] += dd; 22 i += lowbit(i); 23 } 24 } 25 26 int sum(int i) 27 { 28 int ret=0; 29 while (i>0) 30 { 31 ret += c[i]; 32 i -= lowbit(i); 33 } 34 return ret; 35 } 36 37 int main() 38 { 39 int t,ncase=1;scanf("%d",&t); 40 while (t--) 41 { 42 scanf("%d%d",&n,&m); 43 scanf("%s",str+1); 44 printf("Case %d:\n",ncase++); 45 memset(c,0,sizeof(c)); 46 int len=strlen(str+1); 47 for (int i=1 ;i<=len-2 ;i++) 48 { 49 if (str[i]==‘w‘ && str[i+1]==‘b‘ && str[i+2]==‘w‘) 50 add(i,1); 51 } 52 char ch[3]; 53 int l,r; 54 int type; 55 for (int i=0 ;i<m ;i++) 56 { 57 scanf("%d",&type); 58 if (type==0) 59 { 60 scanf("%d%d",&l,&r); 61 if (l>=r-1) printf("0\n"); 62 else printf("%d\n",sum(r-1)-sum(l)); 63 } 64 else 65 { 66 scanf("%d%s",&l,ch); 67 if (l+1-2>=1 && l+1<=n) 68 { 69 if (str[l+1-2]==‘w‘&&str[l+1-1]==‘b‘) 70 { 71 if (str[l+1]==‘w‘ && ch[0]==‘b‘) 72 add(l+1-2,-1); 73 else if (str[l+1]==‘b‘&&ch[0]==‘w‘) 74 add(l+1-2,1); 75 } 76 } 77 if (l+1-1>=1 && l+1+1<=n) 78 { 79 if (str[l+1-1]==‘w‘&&str[l+1+1]==‘w‘) 80 { 81 if (str[l+1]==‘b‘&&ch[0]==‘w‘) 82 add(l+1-1,-1); 83 else if (str[l+1]==‘w‘&&ch[0]==‘b‘) 84 add(l+1-1,1); 85 } 86 } 87 if (l+1>=1 && l+1+2<=n) 88 { 89 if (str[l+1+1]==‘b‘&&str[l+1+2]==‘w‘) 90 { 91 if (str[l+1]==‘w‘&&ch[0]==‘b‘) 92 add(l+1,-1); 93 else if (str[l+1]==‘b‘&&ch[0]==‘w‘) 94 add(l+1,1); 95 } 96 } 97 str[l+1]=ch[0]; 98 } 99 } 100 } 101 return 0; 102 }
标签:
原文地址:http://www.cnblogs.com/huangxf/p/4391920.html