11.8模拟赛

预计得分:100+0+50-100
实际得分:100+0+0

今天好气呀
怼了两个多小时的线段树
差点过样例
调试了一下午没有调出来

全是因为代码写的太丑了
Myj佬过样例然后就过了……

第一题……
第二题是紫书上的原题(稍作改动)(见某题4)
第三题是个线段树裸题

然而我的merge函数和query函数已经长成这样了

node merge(int L,int R){
	node newn;
	newn.l=T[L].l;
	newn.r=T[R].r;
	newn.left=T[L].left;
	newn.right=T[R].right;
	newn.midsta=T[L].midsta;
	newn.midsize=T[L].midsize;
	if(T[L].left==T[L].r-T[L].l+1&&T[R].left)
		newn.left=T[L].left+T[R].left;
	if(T[R].right==T[R].r-T[R].l+1&&T[L].right)
		newn.right=T[R].right+T[L].right;	
	if(((((T[L].right+T[R].left-1))/2)>((newn.midsize-1)/2))){
		newn.midsize=T[L].right+T[R].left;
		newn.midsta=T[L].r-T[L].right+1;
	}
	if(T[L].right+T[R].left&&!newn.midsize){
		newn.midsize=T[L].right+T[R].left;
		newn.midsta=T[L].r-T[L].right+1;
	}
	if((((T[R].midsize-1)/2)>((newn.midsize-1)/2))){
		newn.midsize=T[R].midsize;
		newn.midsta=T[L].r-T[L].l+1+T[R].midsta;
	}
	if((T[R].midsize&&!newn.midsize)){
		newn.midsize=T[R].midsize;
		newn.midsta=T[L].r-T[L].l+1+T[R].midsta;
	}
	return newn;
}

int query(){
	int ans,maxl=0;
	if(T[1].left>maxl){
		maxl=T[1].left;
		ans=1;
	}
	if(!maxl&&T[1].midsize){
		maxl=(T[1].midsize-1)>>1;
		ans=T[1].midsta+maxl;
	}
	if((T[1].midsize)>maxl){
		maxl=(T[1].midsize-1)>>1;
		ans=T[1].midsta+maxl;
	}
	if(T[1].right>maxl){
		maxl=T[1].right;
		ans=n;
	}
	return ans;
}

然后就死活只过7个数据了
剩下的就是某两行顺序错了
然而对于这个题目来说顺序错了就意味着要么是merge函数
要么是query函数写错了(一个细微的错误)

于是我重构代码

代码是没那么恶心了
但是还是不对

……

	int query(node &s){
		int ans=0,maxl=0;
		if(s.Z-1)ans=1,maxl=s.Z-1;
		if(((s.MY-s.MZ)>>1)>maxl)ans=((s.MY-s.MZ)>>1)+s.MZ;
		if(s.Y-1>maxl)ans=n;
		return ans;
	}
	node merge(node& L,node& R){
		node M=NEWnode(L.l,R.r);
		M.Z=L.Z;
		M.Y=R.Y;
		if(L.Z==(L.r-L.l+1)&&R.Z)M.Z=L.Z+R.Z;
		if(R.Y==(R.r-R.l+1)&&L.Y)M.Y=L.Y+R.Y;
		M.MZ=L.MZ;M.MY=L.MY;
		if(L.Y&&R.Z){
			int mZ=L.r-L.l+1-L.Y+L.l;
			int mY=R.l+R.Z-1;
			if(mY-mZ+1>M.MY-M.MZ+1)M.MY=mY,M.MZ=mZ;
		}
		if(R.MY-R.MZ>M.MY-M.MZ)
			M.MY=R.MY,M.MZ=R.MZ;
		return M;
	}

简直了
如果在考场上该怎么办呢
我总不能3个小时调(怼)一个数据结构吧……
那样的话吃枣耀丸

原文地址:https://www.cnblogs.com/qdscwyy/p/7805633.html