帅气的HYC的珍珠

来源:互联网 发布:搜索引擎优化成功案例 编辑:程序博客网 时间:2024/04/28 08:49

思路:

维护树状数组也可以,维护数组也可以。

l数组存放当前是露珠连续的第几个

sum数组存放当前1-》i 是第几个珍珠

ans= sum[r]- sum[l-1]

特殊判断一下 如果1 1 1这种情况 需要+1

 sum[l]-sum[l-1]==1的时候需要-1   判断是如何转移过来的


#include <iostream>#include <queue>#include <stdio.h>#include <cstring>using namespace std;int sum[1000005];int l[1000005];int a[1000005];int main(){    int n;    int t;    scanf("%d",&t);    while(t--)    {   a[0]=0;        scanf("%d",&n);        for(int i=1;i<=n;i++)        {            scanf("%d",&a[i]);            if(a[i]==1)                {                    l[i]=l[i-1]+1;                }            else            {                l[i]=0;            }            if(l[i]==2)            {                sum[i]=sum[i-1]+1;            }            else                sum[i]=sum[i-1];        }        int q;        scanf("%d",&q);        while(q--)        {            int ql,qr;            scanf("%d%d",&ql,&qr);            int ans=sum[qr]-sum[ql-1];            if(ql==qr)            {                ans=0;            }            else if(ql+1==qr)            {                if(a[ql]==1&&a[qr]==1)                    ans=1;                else ans=0;            }            else            {            if(a[ql]==1&&a[ql-1]==1&&a[ql+1]==1)                ans+=1;            if(sum[ql]-sum[ql-1]==1)                ans--;            }            printf("%d\n",ans);        }    }}/*141 1 0 131 22 31 45101 0 1 1 1 1 0 0 1 110*/


0 0