题解 P1503 【鬼子进村】
提供两种做法,fhq_treap和set 思路: 首先在平衡树中加入0节点和n+1节点,是左右边界 'D x':在平衡树中加入x节点(为什么是加入而不是删除,我后面会详细讲到) 'R':既然是上一个点恢复了,而样例的最后一个询问为我们贴心地考虑了连续恢复的情况,那么就是要维护一个后进先出的 栈 来保存您删除的点啦~ 'Q x'查询x点的前驱pre上一个被删除的点),和x的后继suc下一个被删除的点,那么x能到达的点的个数就是suc-pre-1个(题目给的是一条编号连续的链,那么根据编号来查找个数就很方便啦^ _ ^) fhq_treap #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #define dwn(i,a,b) for(int i=a;i>=b;--i) template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x=f?-x:x;} const int N=5e4+10;