2011 Asia Beijing Regional Online Contest-1007 hdu4046 Panda
来源:互联网 发布:单片机 8位可变波特率 编辑:程序博客网 时间:2024/05/01 19:35
题目有两个操作:
1. 查询一段区间内的wbw的个数
2. 修改某一个位置的字母
我们用树状数组记录sum[i] 表示以i之前出线的wbw的个数
当查询a,b区间时sum[b] - sum[a+1]就是a,b间wbw的个数
当更新某个点时,只需判定改变这个字母所带来的wbw个数的变化,并更新到树状数组中即可
#include <iostream>#include <cstdio>#include <string>#include <memory.h>using namespace std;const int M = 50005;char ch[M];int sum[M];int n,m;void INIT();void sol();void change(int k,int d);int SUM(int k);bool judge(int x);int lowbit(int k);int main(){ int t,cas = 1; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); scanf("%s",&ch); INIT(); printf("Case %d:\n",cas++); sol(); }}void INIT(){ memset(sum,0,sizeof(sum)); for(int i = 2;i < n;i++) { if(ch[i-2] == 'w' && ch[i-1] == 'b' && ch[i] == 'w') change(i,1); } return;}void sol(){ int a,b,c; char d; for(int i = 0;i < m;i++) { scanf("%d%",&a); if(a == 0) { scanf("%d%d",&b,&c); if(c - b <= 1) printf("0\n"); else printf("%d\n",SUM(c)- SUM(b + 1)); } else if(a == 1) { scanf("%d",&b); cin >> d; if(d != ch[b]) { if(judge(b)) change(b,-1); if(judge(b+1)) change(b+1,-1); if(judge(b+2)) change(b+2,-1); ch[b] = d; if(judge(b)) change(b,1); if(judge(b+1)) change(b+1,1); if(judge(b+2)) change(b+2,1); } } }}bool judge(int x){ if(x < 2)return false; if(ch[x-2] == 'w' && ch[x-1] == 'b' && ch[x] == 'w') return true; else return false;}int lowbit(int k){return k&(-k);}void change(int k,int d){ while(k < M) { sum[k] += d; k += lowbit(k); } return;}int SUM(int k){ int s = 0; while(k > 0) { s += sum[k]; k-= lowbit(k); } return s;}
- 2011 Asia Beijing Regional Online Contest-1007 hdu4046 Panda
- The 36th ACM/ICPC Asia Regional Beijing Site Online Contest - G Panda
- The 36th ACM/ICPC Asia Regional Beijing Site Online Contest - G Panda
- 【树状数组】The 36th ACM/ICPC Asia Regional Beijing Site Online Contest - G Panda
- 4046 Panda(The 36th ACM/ICPC Asia Regional Beijing Site —— Online Contest)
- 2011 Asia Beijing Regional Online Contest-1005 hdu4044 GeoDefense
- 2011 Asia Beijing Regional Online Contest-1002 hdu4041 Eliminate Witches!
- 2011 Asia Beijing Regional Online Contest-1010 hdu4049 Tourism Planning
- 2011 Asia Beijing Regional Online Contest-1006 hdu4045 Machine scheduling
- 2011 Asia Beijing Regional Online Contest-1004 hdu4043 FXTZ II
- 2011 Asia Beijing Regional Online Contest-1005 hdu4044 GeoDefense-tjuqxy
- 2014 Asia Beijing Regional Contest
- 2015 ACM/ICPC Asia Regional Beijing Online
- The 36th ACM/ICPC Asia Regional Beijing Site Online Contest - B Eliminate Witches!
- The 36th ACM/ICPC Asia Regional Beijing Site Online Contest - B_Eliminate Witches!
- 【栈+模拟】The 36th ACM/ICPC Asia Regional Beijing Site Online Contest - B Eliminate Witches!
- 4045 Machine scheduling(The 36th ACM/ICPC Asia Regional Beijing Site —— Online Contest)
- Hdu 5038 Grade(2014 ACM/ICPC Asia Regional Beijing Online 1007)
- SQL Server 2005中的CHECKSUM功能
- Android获取本机ip地址和Mac地址
- 再论Java的随机数
- 我写的万能多用途简洁的Makefile
- 心情不好或者问题很难解决就看一看
- 2011 Asia Beijing Regional Online Contest-1007 hdu4046 Panda
- hdu 3673 David Shopping
- 分享国内外21大知名网盘
- poj 3468 树状数组解法(解决区间更新,区间求和)
- linux下valgrind的使用概述
- 12个国外稳定无限量免费网盘
- C#is操作符
- DOS指令大全
- svn 命令行下常用的几个命令