hdu 4046 Panda
2012-11-19 11:05
148 查看
题目大意:对于一个给定的字符串(有‘b’和‘w’组成),求其中“wbw”的数目。
这题刚开始做时没什么思路,或许跟我本来就讨厌字符串这类题有关吧。好,废话少说,讲讲思路吧。
这题其实是考线段树的,单点更新,区间合并。合并时要注意一下边界,详细的还是自己看看代码吧。
View Code
这题刚开始做时没什么思路,或许跟我本来就讨厌字符串这类题有关吧。好,废话少说,讲讲思路吧。
这题其实是考线段树的,单点更新,区间合并。合并时要注意一下边界,详细的还是自己看看代码吧。
View Code
#include <stdio.h> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define maxn 50000 struct node { int cnt; }setree[maxn<<2]; char s[50005]; void pushup(int rt,int len,int m,int l,int r) { setree[rt].cnt=setree[rt<<1].cnt+setree[rt<<1|1].cnt; if(len>2){ if(s[m-1]=='w'&&s[m]=='b'&&s[m+1]=='w'&&m>l) setree[rt].cnt++; else if(s[m]=='w'&&s[m+1]=='b'&&s[m+2]=='w'&&m<r-1) setree[rt].cnt++; } } void build(int l,int r,int rt) { if(l==r){ setree[rt].cnt=0; return; } int m=(l+r)>>1; build(lson); build(rson); pushup(rt,r-l+1,m,l,r); } void update(int l,int r,int rt,int num) { if(l==r) return; int m=(l+r)>>1; if(num<=m) update(lson,num); else update(rson,num); pushup(rt,r-l+1,m,l,r); } int query(int l,int r,int rt,int L,int R) { if(L<=l&&r<=R) return setree[rt].cnt; int m=(l+r)>>1; if(R<=m) return query(lson,L,R); else if(L>m) return query(rson,L,R); else{ int ans=query(lson,L,m)+query(rson,m+1,R); if(s[m-1]=='w'&&s[m]=='b'&&s[m+1]=='w'&&m>L&&m<R) ans++; else if(s[m]=='w'&&s[m+1]=='b'&&s[m+2]=='w'&&m>=L&&m<R-1) ans++; return ans; } } int main() { int t,cas=1; scanf("%d",&t); while(t--){ int n,m; scanf("%d%d",&n,&m); scanf("%s",s); build(0,n-1,1); printf("Case %d:\n",cas++); while(m--){ int op; scanf("%d",&op); if(op==1){ int num; char opp[5]; scanf("%d%s",&num,opp); s[num]=opp[0]; update(0,n-1,1,num); } else{ int l,r; scanf("%d%d",&l,&r); printf("%d\n",query(0,n-1,1,l,r)); } } } }
相关文章推荐
- HdU 4046 Panda 线段树
- hdu 4046 Panda(线段树+单点更新)
- HDU 4046 Panda(树状数组)
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
- HDU 4046 Panda
- HDU 4046 Panda(RMQ 线段树 树状数组)
- HDU 4046 - Panda (线段树 + 单点更新)
- [HDU 4046]Panda[线段树]
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
- HDU 4046 Panda
- hdu_4046 Panda线段树_点修改_区间求和
- HDU 4046 Panda 树状数组
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
- hdu 4046 Panda
- hdu_4046_Panda(树状数组)
- hdu 4046 Panda
- hdu_4046_Panda(树状数组)
- [置顶] HDU 4046 Panda (分块 或 线段树区间合并)
- hdu 4046 Panda 线段树
- HDU - 4046 Panda