一个奇奇怪怪的问题

P3391 【模板】文艺平衡树

Martian148 @ 2021-09-25 18:36:32

代码本地数据下载可过,对拍也没有问题,但是交luogu就RE和MLE,有哪位大佬可以说说一般是什么原因呢

#include<bits/stdc++.h>
using namespace std;
const int maxn=101005;
int N,M,root;

inline int read(){
    int ret=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
    while(ch<='9'&&ch>='0')ret=ret*10+ch-'0',ch=getchar();
    return ret*f;
}

struct node{
    int size,fa,ch[2],rev;
}t[maxn];

inline void pushup(int x){
    t[x].size=t[t[x].ch[0]].size+t[t[x].ch[1]].size+1;
}

inline void pushdown(int x){
    if(t[x].rev){
        swap(t[x].ch[0],t[x].ch[1]);
        t[t[x].ch[0]].rev^=1;
        t[t[x].ch[1]].rev^=1;
        t[x].rev=0;
    }
}

void build(int l,int r,int x){
    if(l>r) return;
    int mid=(r-l>>1)+l;
    if(mid<x)t[x].ch[0]=mid;else t[x].ch[1]=mid;
    t[mid].fa=x;t[mid].size=1;
    if(l==r) return ;
    build(l,mid-1,mid);build(mid+1,r,mid);
    pushup(mid);
}

inline void rotate(int x,int &goal){
    int y=t[x].fa;int z=t[y].fa;int k=t[y].ch[1]==x;
    if(y==goal)goal=x;
    else {t[z].ch[t[z].ch[1]==y]=x;}
    t[t[x].ch[k^1]].fa=y;t[y].fa=x;t[x].fa=z;
    t[y].ch[k]=t[x].ch[k^1];t[x].ch[k^1]=y;
    pushup(y);pushup(x);
}

void splay(int x,int &goal){
    while(x!=goal){
        int y=t[x].fa,z=t[y].fa;
        if(y!=goal)
            (t[z].ch[0]==y)^(t[y].ch[0]==x)?rotate(x,goal):rotate(y,goal);
        rotate(x,goal);
    }
}

void rever(int L,int R){
    splay(L,root);
    splay(R,t[L].ch[1]);
    t[t[R].ch[0]].rev^=1;
}

int query(int x,int k){
    pushdown(x);
    int sum=t[t[x].ch[0]].size+1;
    if(sum==k)return x;
    sum>k?query(t[x].ch[0],k):query(t[x].ch[1],k-sum);
}

void print(int x){
    pushdown(x);
    t[x].ch[0]&&(print(t[x].ch[0]),0);
    if(x>=2&&x<=N+1)printf("%d ",x-1);
    t[x].ch[1]&&(print(t[x].ch[1]),0);
}

int main(){
    N=read();M=read();
    root=(N+3)/2;build(1,N+2,root);
    for(int i=1;i<=M;i++){
        int L=read(),R=read();
        L=query(root,L);
        R=query(root,R+2);
        rever(L,R);
    }
    print(root);
    return 0;
}

by 金珂拉 @ 2021-09-25 18:41:01

query最后一行开头应该要加return?


by Martian148 @ 2021-09-25 18:54:39

@金珂拉 是的!!巨佬orz


|