关于奇怪的MLE
  • 板块灌水区
  • 楼主黑客
  • 当前回复13
  • 已保存回复13
  • 发布时间2020/8/3 21:32
  • 上次更新2023/11/6 21:22:49
查看原帖
关于奇怪的MLE
189394
黑客楼主2020/8/3 21:32

请问dalao为什么我这个程序会出现MLE?真的很奇怪…

#include<bits/stdc++.h>
using namespace std;
#define N 100010
#define ls x<<1
#define rs x<<1|1
int n;
bool rev[N][2];
struct node{
	bool l,r,u,d,p,q;
	int lb,rb;
}t[4*N];
void pushup(node &x,node l,node r){
	x.lb=l.lb;x.rb=r.rb;
	x.l=l.l|(l.u&rev[l.rb][0]&r.l&rev[l.rb][1]&l.d);
	x.r=r.r|(r.u&rev[l.rb][0]&l.r&rev[l.rb][1]&r.d);
	x.u=(l.u&rev[l.rb][0]&r.u)|(l.p&rev[l.rb][1]&r.q);
	x.d=(l.d&rev[l.rb][1]&r.d)|(l.q&rev[l.rb][0]&r.p);
	x.p=(l.p&rev[l.rb][1]&r.d)|(r.p&rev[l.rb][0]&l.u);
	x.q=(l.q&rev[l.rb][0]&r.u)|(r.q&rev[l.rb][1]&l.d);
}
void build(int x,int l,int r){
	if(l==r){
		t[x].u=t[x].d=1;
		t[x].lb=t[x].rb=l;
		return;
	}
	int mid=l+r>>1;
	build(ls,l,mid);
	build(rs,mid+1,r);
	pushup(t[x],t[ls],t[rs]);
}
void update1(int x,int l,int r,int p,int row,int val){
	int mid=l+r>>1;
	if(mid==p){
		rev[p][row]=val;
		pushup(t[x],t[ls],t[rs]);
		return;
	}
	if(p<=mid)update1(ls,l,mid,p,row,val);
	else update1(rs,mid+1,r,p,row,val);
	pushup(t[x],t[ls],t[rs]);
}
void update2(int x,int l,int r,int p,int val){
	if(l==r){
		t[x].l=t[x].r=t[x].p=t[x].q=val;
		return;
	}
	int mid=l+r>>1;
	if(p<=mid)update2(ls,l,mid,p,val);
	else update2(rs,mid+1,r,p,val);
	pushup(t[x],t[ls],t[rs]);
}
node query(int x,int l,int r,int xl,int xr){
	node ans;
	if(l==xl&&r==xr){
		return t[x];
	}
	int mid=l+r>>1;
	if(xr<=mid)return query(ls,l,mid,xl,xr);
	else if(xl>mid)return query(rs,mid+1,r,xl,xr);
	pushup(ans,query(ls,l,mid,xl,xr),query(rs,mid+1,r,xl,xr));
	return ans;
}
int main(){
	scanf("%d",&n);char s[10];
	build(1,1,n);
	while(~scanf("%s",s)&&s[0]!='E'){
		if(s[0]=='O'){
			int a,b,c,d;
			scanf("%d%d%d%d",&a,&b,&c,&d);
			if(a==c)update1(1,1,n,min(b,d),a-1,1);
			else update2(1,1,n,b,1);
		}
		if(s[0]=='C'){
			int a,b,c,d;
			scanf("%d%d%d%d",&a,&b,&c,&d);
			if(a==c)update1(1,1,n,min(b,d),a-1,0);
			else update2(1,1,n,b,0);
		}
		if(s[0]=='A'){
			int a,b,c,d;bool flag=0;
			scanf("%d%d%d%d",&a,&b,&c,&d);
			if(b>d)swap(a,c),swap(b,d);
			node ans1=query(1,1,n,b,d),ans2=query(1,1,n,1,b),ans3=query(1,1,n,d,n);
			if(a==1){
				if(c==1)flag=(ans1.u|(ans2.r&ans1.d&ans3.l));
				else flag=((ans2.r&ans1.d)|(ans3.l&ans1.u)|ans1.p);
			}
			else{
				if(c==1)flag=((ans2.r&ans1.u)|(ans3.l&ans1.d)|ans1.q);
				else flag=((ans2.r&ans1.u&ans3.l)|ans1.d);
			}
			printf(flag?"Y\n":"N\n");
		}
	}
}

P4246

2020/8/3 21:32
加载中...