莫名RE40分求助
查看原帖
莫名RE40分求助
295864
eigw22h619楼主2022/4/7 14:48

源代码:

#include<bits/stdc++.h>
using namespace std;
inline int re()
{
    int x=0;register char ch=getchar();
    while(ch<'0'||ch>'9')ch=getchar();
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch&15);ch=getchar();}
    return x;
}
inline void wr(int x)
{
    if(x>=10)wr(x/10);
    putchar(x%10^'0');
}
inline void wr(int x,char c)
{wr(x);putchar(c);}
#define cn const
#define N 500001
struct xx{int a,b;xx(){}};
struct xxx{int a,b,i;xxx(){}xxx(cn int&a,cn int&b,cn int&i):a(a),b(b),i(i){}};
int b[N];xx a[N];
int nxt[19][N];xxx st[N];int h;
int main()
{
    ios::sync_with_stdio(false);
    cn int n=re();int q=re();
    for(int i=1;i<=n;++i)b[i]=re();
    for(int i=1;i<=n;++i){a[i].a=b[i];a[i].b=re();}
    for(int i=1;i<=n;++i)
    {
        while(h&&(a[i].a==st[h].a||a[i].b>=st[h].b))
            nxt[0][st[h--].i]=i;
        st[++h]=xxx(a[i].a,a[i].b,i);
    }
    for(int j=1;j<=__lg(n);++j)
    for(int i=1;i<=n;++i)
        nxt[j][i]=nxt[j-1][nxt[j-1][i]];
    cn int er[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288};
    int s,p;
    while(q --> 0)
    {
        p=re();cn int r=re();
        s=1;
        for(int j=__lg(r-p);j>=0;--j)
            if(nxt[j][p]&&nxt[j][p]<=r){p=nxt[j][p];s+=er[j];}
        wr(s,10);
    }
    return 0;
}

提交记录:R73327424

2022/4/7 14:48
加载中...