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)的个数 看到逆序对顺序对之类的问题一开始想到了曾经用归并排序求逆序对,结果 ...
随机推荐
- flux,redux,vuex状态集管理工具之间的区别
一:redux和flux的区别 1)redux是flux中的一个实现 2))在redux中我们只能定义一个store,在flux中我们可以定义多个 3)在redux中,store和dispatch都放 ...
- 使用php实现二叉搜索树
看到一位大神写的js的搜索树,自己也按照模式写了一个php的二叉搜索树. <?phpclass node{ public $data; public $key; public $left=nul ...
- CSS样式适配杂记
1.问:input框的对齐,制作类似百度搜索框的时候,发现IE下前面输入框和后面按钮总是不能对齐. 解答:给input框增加vertical-align:bottom; 2.问:IE下display: ...
- Java 集合 ArrayList 需要知道的几个问题
问:Arraylist 的动态扩容机制是如何自动增加的?简单说说你理解的流程? 答:当在 ArrayList 中增加一个对象时 Java 会去检查 Arraylist 以确保已存在的数组中有足够的容量 ...
- 【转】Linux下使用locale命令设置语言环境
转自:http://www.cnblogs.com/dolphi/p/3622570.html locale命令设置语言环境 在Linux中通过locale来设置程序运行的不同语言环境,locale由 ...
- 为什么现在改用int.TryParse了
以前一直用 int.Parse(x)或者 Convert.ToInt64(x),后来项目中发现如果x变量的值为null是,就报错了,哪怕我这样写 int.Parse(x=x??"0" ...
- C++中 list与vector的区别
引用http://www.cnblogs.com/shijingjing07/p/5587719.html C++ vector和list的区别 1.vector数据结构vector和数组类似,拥有一 ...
- react杂记
React webpack+react (hello world) 项目结构: src: app.js main.js package.json webpack_dev_config.js 需要安装包 ...
- VC++文件监控 ReadDirectoryChangesW
#include <windows.h> #include <tchar.h> #include <stdio.h> #include <assert.h&g ...
- sql 分析 依赖beanutils
你还在为sql语句的拼接而烦恼吗? sql语句支持表达式了! package com.newland.bi.webservice.common.manage; import java.util.Arr ...