hdu 4046 树状数组
#include<stdio.h>
#include<string.h>
#define N 51000
char s[N];
int a[N],n;
int number(int x) {
return x&-x;
}
void creat(int x,int k) {
int i;
for(i=x;i<=50000;i+=number(i))
a[i]+=k;
}
int sum(int x) {
int su=0,i;
for(i=x;i>=1;i-=number(i))
su+=a[i];
return su;
}
int suma(int a,int b) {
return sum(b)-sum(a);
}
int main() {
int t,m,i,j,k,count=0;
char c;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&n,&m);
scanf("%s",s+1);
memset(a,0,sizeof(a));
for(i=3;i<=n;i++)
if(s[i-1]=='b'&&s[i]=='w'&&s[i-2]=='w')
creat(i,1);
printf("Case %d:\n",++count);
while(m--) {
scanf("%d",&i);
if(i==0) {
scanf("%d%d",&j,&k);
j++;k++;
if(j+1>=k)
printf("0\n");
else
printf("%d\n",suma(j+1,k));
}
else {
scanf("%d %c",&j,&c);
j++;
if(s[j]==c)
continue;
if(s[j-1]=='b'&&s[j]=='w'&&s[j-2]=='w')//将没有改变前,如果与这个字符有关系可以变成一个love就要减一
creat(j,-1);
if(s[j-1]=='w'&&s[j]=='b'&&s[j+1]=='w')
creat(j+1,-1);
if(s[j]=='w'&&s[j+1]=='b'&&s[j+2]=='w')
creat(j+2,-1);
s[j]=c;
if(s[j-1]=='b'&&s[j]=='w'&&s[j-2]=='w')//改变后,如果与这个字符有关系可以变成一个love的话加一
creat(j,1);
if(s[j-1]=='w'&&s[j]=='b'&&s[j+1]=='w')
creat(j+1,1);
if(s[j]=='w'&&s[j+1]=='b'&&s[j+2]=='w')
creat(j+2,1);
}
}
}
return 0;
}
hdu 4046 树状数组的更多相关文章
- hdu 4638 树状数组 区间内连续区间的个数(尽可能长)
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 4777 树状数组+合数分解
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 2852 (树状数组+无序第K小)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意:操作①:往盒子里放一个数.操作②:从盒子里扔掉一个数.操作③:查询盒子里大于a的第K小 ...
- HDU 4911 (树状数组+逆序数)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4911 题目大意:最多可以交换K次,就最小逆序对数 解题思路: 逆序数定理,当逆序对数大于0时,若ak ...
- hdu 5792(树状数组,容斥) World is Exploding
hdu 5792 要找的无非就是一个上升的仅有两个的序列和一个下降的仅有两个的序列,按照容斥的思想,肯定就是所有的上升的乘以所有的下降的,然后再减去重复的情况. 先用树状数组求出lx[i](在第 i ...
- HDU 1934 树状数组 也可以用线段树
http://acm.hdu.edu.cn/showproblem.php?pid=1394 或者是我自己挂的专题http://acm.hust.edu.cn/vjudge/contest/view. ...
- 2018 CCPC网络赛 1010 hdu 6447 ( 树状数组优化dp)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 思路:很容易推得dp转移公式:dp[i][j] = max(dp[i][j-1],dp[i-1][j ...
- 【模板】HDU 1541 树状数组
http://acm.hdu.edu.cn/showproblem.php?pid=1541 题意:给你一堆点,每个点右一个level,为其右下方所有点的数量之和,求各个level包含的点数. 题解: ...
- hdu 5147 树状数组
题意:求满足a<b<c<d,A[a]<A[b],A[c]<A[d]的所有四元组(a,b,c,d)的个数 看到逆序对顺序对之类的问题一开始想到了曾经用归并排序求逆序对,结果 ...
随机推荐
- 49.Ext.form.TextField()基本用法
转自:https://blog.csdn.net/toudoulin/article/details/6719163 var textfieldName = new Ext.form.TextFiel ...
- Sqlserver日期操作
Sqlserver日期操作 select GETDATE() as '当前日期', DateName(year,GetDate()) as '年', DateName(month,GetDate()) ...
- go多进程
package main import "fmt" import "time"func loop() { for i := 0; i < 10; i++ ...
- SpringBoot2.0整合SpringSecurity实现WEB JWT认证
相信很多做技术的朋友都做过前后端分离项目,项目分离后认证就靠JWT,费话不多说,直接上干活(写的不好还请多多见谅,大牛请绕行) 直接上代码,项目为Maven项目,结构如图: 包分类如下: com.ap ...
- python中的深拷贝和浅拷贝(面试题二)
一.浅拷贝 定义:浅拷贝只是对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值. 浅拷贝的特点: 公用一个值: 这两个变量的内存地址一样: 对其中一个变量的值改变,另外一个变量的值也 ...
- VS插件-Resharper
最近代码因为Resharper出现了点问题,同事问我这个插件有什么用,下面就列几个最近常用的功能.其他功能后续慢慢更新 1.什么是Resharper ReSharper是一个JetBrains公司出品 ...
- [ BZOJ 2134 ] 单选错位
\(\\\) \(Description\) 一共\(N\)道题目,第\(i\)道题有\(A_i\)个选项,现在有一个人做完了所有题目,但将每一道题的答案都写到了下一道题的位置\((\)第\( ...
- C# windform自定义控件的属性小知识
word中的加粗变斜之类的一直让我以为是button,直到我接触了自定义控件,才发现实现这种机能最好的是CheckBox,然后我们在做一个系统的时候,这种控件有可能要用好多次,总不能在用一次的时候,就 ...
- SQl基本操作——try catch
begin try ... end try begin catch ... end catch
- js 零碎
function具有一个属性是length,表示希望接收到的命名参数的个数.可以通过arguments获取参数.arguments.callee表示函数本身,递归时有用,也可以通过arguments. ...