zoukankan      html  css  js  c++  java
  • 【HDU】4046 Panda

      1 #include<cstdio>
      2 #define MAX(a,b) ((a)>(b)?(a):(b))
      3 #define MAXN 50010
      4 char s[MAXN];
      5 int tree[MAXN<<2];
      6 inline void PushUp(int rt)
      7 {
      8     tree[rt]=tree[rt<<1]+tree[rt<<1|1];
      9 }
     10 inline bool OK(int i)
     11 {
     12     return s[i]=='w'&&s[i+1]=='b'&&s[i+2]=='w';
     13 }
     14 void Build(int L,int R,int rt)
     15 {
     16     if(L==R)
     17         tree[rt]=OK(L)?1:0;
     18     else
     19     {
     20         int mid=(L+R)>>1;
     21         Build(L,mid,rt<<1);
     22         Build(mid+1,R,rt<<1|1);
     23         PushUp(rt);
     24     }
     25 }
     26 void Update(int x,int L,int R,int rt)
     27 {
     28     if(L==R)
     29         tree[rt]=OK(L)?1:0;
     30     else
     31     {
     32         int mid=(L+R)>>1;
     33         if(mid>=x)
     34             Update(x,L,mid,rt<<1);
     35         else
     36             Update(x,mid+1,R,rt<<1|1);
     37         PushUp(rt);
     38     }
     39 }
     40 int Query(int x,int y,int L,int R,int rt)
     41 {
     42     if(x<=L&&R<=y)
     43         return tree[rt];
     44     int mid=(L+R)>>1,ans=0;
     45     if(mid>=x)
     46         ans+=Query(x,y,L,mid,rt<<1);
     47     if(y>mid)
     48         ans+=Query(x,y,mid+1,R,rt<<1|1);
     49     return ans;
     50 }
     51 int main()
     52 {
     53     char ch;
     54     int x,y,type,c,i,n,q,ca=1;
     55     scanf("%d",&c);
     56     while(c--)
     57     {
     58         scanf("%d%d %s",&n,&q,s);
     59         n-=3;
     60         printf("Case %d:\n",ca++);
     61         if(n<0)
     62         {
     63             while(q--)
     64             {
     65                 scanf("%d%d",&type,&x);
     66                 if(type)
     67                     scanf(" %c",&ch);
     68                 else
     69                 {
     70                     scanf("%d",&y);
     71                     puts("0");
     72                 }
     73             }
     74         }
     75         else
     76         {
     77             Build(0,n,1);
     78             while(q--)
     79             {
     80                 scanf("%d%d",&type,&x);
     81                 if(type)
     82                 {
     83                     scanf(" %c",&ch);
     84                     if(s[x]!=ch)
     85                     {
     86                         s[x]=ch;
     87                         for(i=MAX(0,x-2);i<=x;i++)
     88                             Update(i,0,n,1);
     89                     }
     90                 }
     91                 else
     92                 {
     93                     scanf("%d",&y);
     94                     if(x>y-2)
     95                         puts("0");
     96                     else
     97                         printf("%d\n",Query(x,y-2,0,n,1));
     98                 }
     99             }
    100         }
    101     }
    102     return 0;
    103 }
    新博客:www.zhixiangli.com
  • 相关阅读:
    PS3 可播放的多媒体类型
    VB个性化文件夹图标
    Delphi源码:编辑长求字符串相似度
    Delphi使用zlib来压缩文件
    汉字编码问题
    Silverlight 3 学习概要
    asp.net下大文件上传知识整理
    DHTML动态创建一个弹出遮罩层
    Delphi的运算符重载
    Windows Vista 交互式服务编程
  • 原文地址:https://www.cnblogs.com/DrunBee/p/2513805.html
Copyright © 2011-2022 走看看