可持久化栈

可持久化栈,支持当前时刻入栈、回溯到某一时刻、某时刻出栈。

struct PersistentStack{
    int stk[N],tp,pre[N],root[N];
    inline void push(int p,int x){/*当前p时刻入栈*/
        stk[++tp]=x;
        root[p]=tp;/*记录p时刻对应的top位置*/
        pre[root[p]]=root[p-1];/*更新上一时刻的root*/
    }
    inline void modify(int p,int x){
        root[p]=root[x];/*回溯到时刻x*/
    }
    inline void pop(int p){/*时刻p的删除操作*/
        root[p]=pre[root[p-1]];/*回到上一时刻的上一个*/
    }
    inline int top(int p){/*时刻p的栈顶*/
        return stk[root[p]];
    }
};
posted @ 2022-11-14 18:05  半步蒟蒻  阅读(79)  评论(0)    收藏  举报