莫名RE求助
查看原帖
莫名RE求助
270854
二叉苹果树楼主2022/10/5 11:21
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;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;
}

把ST表注释了交上去还是RE qwq

求助

2022/10/5 11:21
加载中...