[bzoj1861][Zjoi2006]Book 书架

题目大意:有一串长度为$n$的序列,为$1\sim n$的一个排列,五个操作:

  1. $Top\;S:$把$S$放在序列开头
  2. $Bottom\;S:$把$S$放在序列结尾
  3. $Insert\;S\;T:$把$S$向后移动$T$个位置
  4. $Ask\;S:$询问$S$前有几个元素
  5. $Query\;S:$询问第$S$个元素是什么

题解:平衡树维护序列

卡点:无

C++ Code:

#include <cstdio>
#include <cstdlib>
#define maxn 80010
namespace Treap {
	int P[maxn], sz[maxn];
	int lc[maxn], rc[maxn], fa[maxn];
	int root, idx;
	int ta, tb, tmp, res, s;
	inline int nw(int p) {
		sz[p] = 1;
		P[p] = rand();