可持久化栈
可持久化栈,支持当前时刻入栈、回溯到某一时刻、某时刻出栈。
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]];
}
};