[BZOJ1500]维修序列

传说中的splay tree模版题之完全体?

代码写的弱。。。跑的慢。。。据说区间操作其实不需要分裂?

有时间再优化一下吧。。。。

#include
#include
#include
#include
using namespace std;
const int maxn=500010;
const int inf=500000000;
int root;
int a[maxn],siz[maxn],lm[maxn],rm[maxn],s[2][maxn],sum[maxn],v[maxn],mx[maxn],n,m,stk[maxn],t; 
bool sflag[maxn],flag[maxn];
char S[20];
int cmp(int ro,int k){
	if (siz[s[0][ro]]+1==k) return -1;
	return k>1;
	if (l=1;i--) stk[++t]=i;
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++) scanf("%d",&a[i]);
	a[0]=-inf;n++;a[n]=-inf;
	lm[0]=rm[0]=0;mx[0]=-inf;
	sum[0]=v[0]=siz[0]=0;
	root=build(0,n);
	for (int i=1;i<=m;i++){
		scanf("%s",&S);
		int pos,c;
		switch(S[2]){
			case 'S': //INSERT_posi_tot_ci
			scanf("%d%d",&pos,&n);
			if (n<=0) break;
			for (int i=1;i<=n;i++) scanf("%d",&a[i]);
			insert(pos,n);
			break;
			case 'L': //DELETE_posi_tot
			scanf("%d%d",&pos,&n);
			if (n<=0) break;
			del(pos,n);
			break;
			case 'K': //MAKE-SAME_posi_tot_c
			scanf("%d%d%d",&pos,&n,&c);
			if (n<=0) break;
			samev(pos,n,c);
			break;
			case 'V': //REVERSE_posi_tot
			scanf("%d%d",&pos,&n);
			if (n<=0) break;
			reverse(pos,n);
			break;
			case 'T': //GET-SUM_posi_tot
			scanf("%d%d",&pos,&n);
			if (n<=0){
				printf("0\n");
				break;
			}
			get_sum(pos,n);
			break;
			case 'X': //MAX-SUM
			printf("%d\n",mx[root]);
			break;
		}
	}
}


你可能感兴趣的:(模版,省选,数据结构,平衡树,伸展树,序列操作)