线段树单点更新,要注意两段合并多出的答案的计算即可

//============================================================================
// Name : D.cpp
// Author : L_Ecry
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include <iostream>
#define N 50050
using namespace std;
int value[N*];
char s[N];
inline int cal(int l,int r,int mid)
{ int res=;
if(mid>l&&s[mid-]=='w'&&s[mid]=='b'&&s[mid+]=='w')res++;
if(mid+<r&&s[mid]=='w'&&s[mid+]=='b'&&s[mid+]=='w')res++;
return res;
}
void build(int l,int r,int i)
{
if(l==r)
{
value[i]=;
return ;
}
int mid=(l+r)>>;
int lson=(i<<),rson=(i<<|);
build(l,mid,lson);
build(mid+,r,rson);
value[i]=value[lson]+value[rson]+cal(l,r,mid);
}
void update(int l,int r,int p,int i)
{
if(l==r)
{
return;
}
int mid=(l+r)>>;
int lson=(i<<),rson=(i<<|);
if(p<=mid)update(l,mid,p,lson);
else update(mid+,r,p,rson);
value[i]=value[lson]+value[rson]+cal(l,r,mid);
}
int query(int l,int r,int pl,int pr,int i)
{
if(l==pl&&r==pr)
{
return value[i];
}
int mid=(l+r)>>;
if(pr<=mid)return query(l,mid,pl,pr,i<<);
else if(pl>mid)return query(mid+,r,pl,pr,i<<|);
else
{
return query(l,mid,pl,mid,i<<)+query(mid+,r,mid+,pr,i<<|)+cal(pl,pr,mid);
}
}
int n,m;
void init()
{
scanf("%d%d",&n,&m);
scanf(" %s",s+);
build(,n,);
}
void solve()
{
while(m--)
{
int x,y,z;
char c;
scanf("%d%d",&x,&y);
if(x==)
{
scanf("%d",&z);
y++;z++;
printf("%d\n",query(,n,y,z,));
}
else
{
scanf(" %c",&c);
y++;
s[y]=c;
update(,n,y,);
}
}
}
int main() {
int tt,ri=;
scanf("%d",&tt);
while(tt--)
{
init();
printf("Case %d:\n",++ri);
solve();
}
return ;
}

HDU 4046 Panda的更多相关文章

  1. HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)

    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: ...

  2. hdu 4046 Panda 树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4046 When I wrote down this letter, you may have been ...

  3. HdU 4046 Panda 段树

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4046 意甲冠军:到了bw组成的长度为n的字符串(n<=50000).有m次操作(m<=1000 ...

  4. hdu 4046 Panda [线段树]

    Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  5. HDU—4046 Panda (线段树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4046   题意:给出一个字符串,统计这个字符串任意区间中"wbw"出现的次数. 规定两 ...

  6. HDU 4046 Panda(树状数组)

    Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  7. hdu 4046 2011北京赛区网络赛G 线段树 ***

    还带这么做的,卧槽,15分钟就被A了的题,居然没搞出来 若某位是1,则前两个为wb,这位就是w #include<cstdio> #include<cstring> #defi ...

  8. hdu 4046 树状数组

    #include<stdio.h> #include<string.h> #define N  51000 char s[N]; int a[N],n; int number( ...

  9. HDU 6007 Mr. Panda and Crystal (背包+spfa)

    题意:你生活在一个魔法大陆上,你有n 魔力, 这个大陆上有m 种魔法水晶,还有n 种合成水晶的方式,每种水晶价格告诉你,并且告诉你哪些水晶你能直接造出来,哪些你必须合成才能造出来,问你n魔力最多能卖多 ...

随机推荐

  1. php使用cURL实现Get和Post请求的方法

    1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性 ...

  2. asp.net 柱形图

    在vs中,如果要使用柱形图,我们大多数使用第三方提供的插件,所以必须要引用样式,这里我使用的是Highcharts-4.1.9插件,百度一下就可以下载到. 关键的js代码: <script sr ...

  3. numpy库的常用知识

    为什么有numpy这个库呢?准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.这样为了保存一个简单的[1,2, ...

  4. hdu 4870 Rating

    题目链接:hdu 4870 这题应该算是概率 dp 吧,刚开始看了好几个博客都一头雾水,总有些细节理不清楚,后来看了 hdu 4870 Rating (概率dp) 这篇博客终于有如醍醐灌顶,就好像是第 ...

  5. linux登录mysql

    mysql  -u 用户名 -p密码 mysql -u root -psqj888

  6. yum的使用及配置

    yum的使用及配置 文章来源:http://www.ilanni.com/?p=9032 最近由于服务器需求,需要在公司内网搭建内网yum源. 搭建内网yum源需要分以下几个步骤,如下: 1. yum ...

  7. javascript AOP实现

    参考:http://www.cnblogs.com/rubylouvre/archive/2009/08/08/1541578.html function Person(){ this.say = f ...

  8. phalcon: 获取参数的方法

    phalcon: 获取参数的方法 一般情况下:GET/POST $this->request->get(参数); $this->request->getPost("参 ...

  9. Linux里设置环境变量的方法(export PATH)

    1.动态库路径的设置 Linux下调用动态库和windows不一样.linux 可执行程序是靠配置文件去读取路径的,因此有些时候需要设置路径 具体操作如下 export LD_LIBRARY_PATH ...

  10. Nemo Documents – 给文件添加标签 以日历的形式将文件呈现出来,很像 Outlook,你可以根据年、月、日来查看不同类型的文档

    Nemo Documents – 给文件添加标签   scavin(Google+) on 2012.03.28. Nemo Documents 是款文件组织管理工具(文档管理器),不是街道大妈胜似大 ...