[BZOJ 1500] 수리 서열

전설의 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
"); break; } get_sum(pos,n); break; case 'X': //MAX-SUM printf("%d
",mx[root]); break; } } }

좋은 웹페이지 즐겨찾기