昨晚的D求助
查看原帖
昨晚的D求助
270854
二叉苹果树楼主2022/11/5 18:34

Wrong answer on test 5

谢谢

#include<bits/stdc++.h>

int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(!isdigit(ch))
    {
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(isdigit(ch))
    {
        x=(x<<1)+(x<<3)+ch-'0';
        ch=getchar();
    }
    return x*f;
}

#define MAXN 200005

int x[MAXN],s[MAXN];
long long sum[MAXN];
std::map<int,std::vector<int> >t[2];

int main()
{
    int n=read(),q=read();
    for(int i=1;i<=n;i++)
    {
        x[i]=read();
        s[i]=s[i-1]^x[i];
        sum[i]=sum[i-1]+x[i];
        t[i%2][s[i]].push_back(i);
    }
    for(int i=1;i<=q;i++)
    {
        int l=read(),r=read();
        if(sum[r]-sum[l-1]==0)
            printf("0\n");
        else if(s[l-1]!=s[r])
            printf("-1\n");
        else if((r-l)%2==0||((r-l)%2!=0&&(x[l]==0||x[r]==0)))
            printf("1\n");
        else
        {
            if(*std::lower_bound(t[l&1][s[l-1]].begin(),t[l&1][s[l-1]].end(),l)<r)
                printf("2\n");
            else
                printf("-1\n");
        }
    }
    return 0;
}
2022/11/5 18:34
加载中...