RE如何查错
查看原帖
RE如何查错
270854
二叉苹果树楼主2022/10/7 09:13
#include<bits/stdc++.h>
using namespace std;
inline 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;
}
const int MAXN=1e5+5,MAXLOG=20;
int Max[MAXN][MAXLOG];
int n,q;
int Query(int l,int r)
{
    int k=log2(r-l+1);
    return max(Max[l][k],Max[r-(1<<k)+1][k]);
}
int a[MAXN],val[MAXN],cnt[MAXN];
int num[MAXN],l[MAXN],r[MAXN];
int main()
{
    while(scanf("%d",&n))
    {
        if(n==0)
            return 0;
        q=read();
        int meg=0;
        for(int i=1;i<=n;i++)
        {
            a[i]=read();
            if(i==1)
            {
                num[i]=++meg;
                l[meg]=i;
                val[meg]=a[i];
            }
            else if(a[i]!=a[i-1])
            {
                r[meg]=i-1;
                cnt[meg]=r[meg]-l[meg]+1;
                num[i]=++meg;
                l[meg]=i;
                val[meg]=a[i];
            }
            else
                num[i]=meg;
        }
        r[meg]=n,cnt[meg]=r[meg]-l[meg]+1;
        for(int i=1;i<=meg;i++)
            Max[i][0]=cnt[i];
        for(int j=1;j<=MAXLOG;j++)
            for(int i=1;i+(1<<j)-1<=n;i++)
                Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);
        for(int i=1;i<=q;i++)
        {
            int L,R;
            L=read(),R=read();
            if(num[L]==num[R])
                printf("%d\n",R-L+1);
            else
            {
                int ans=0;
                if(num[L]+1<=num[R]-1)
                    ans=max(Query(num[L]+1,num[R]-1),ans);
                ans=max(r[num[L]-L+1],ans);
                ans=max(R-l[num[R]]+1,ans);
                printf("%d\n",ans);
            } 
        }
    }
    return 0;
}

RE求助,感觉不是数组的问题?

2022/10/7 09:13
加载中...