zoukankan      html  css  js  c++  java
  • 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: ",++count);
    while(m--) {
    scanf("%d",&i);
    if(i==0)  {
    scanf("%d%d",&j,&k);
    j++;k++;
    if(j+1>=k)
    printf("0 ");
    else
    printf("%d ",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;
    }
  • 相关阅读:
    NSThread 多线程 三种方式
    CABasicAnimation 核心动画
    图片圆角属性
    GCD
    IOS 推送
    IOS 截图
    UIImage 截图
    UIImageView 动画
    AFN 判断网络状态
    Template 模式
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410828.html
Copyright © 2011-2022 走看看