求助,本地过编但是交上去就CE
  • 板块灌水区
  • 楼主Michael_Kong
  • 当前回复6
  • 已保存回复6
  • 发布时间2020/7/22 20:24
  • 上次更新2023/11/6 22:33:51
查看原帖
求助,本地过编但是交上去就CE
109266
Michael_Kong楼主2020/7/22 20:24

RT,题目在这里

这里是我的提交记录

我在ubuntu和windows下面都过编了,但是交上去就提示很诡异的错误,dalao们帮帮我吧orz

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
struct node{
	int lv,rv,lenl,lenr,sum,len;
}t[maxn<<2];
int n,m;
void pushup(int pos){
	t[pos].lv=t[pos<<1].lv;
	t[pos].rv=t[pos<<1|1].rv;
	t[pos].lenl=t[pos<<1].lenl;
	t[pos].lenr=t[pos<<1|1].lenr;
	t[pos].sum=max(t[pos<<1].sum,t[pos<<1|1].sum);
	if(t[pos<<1].rv!=t[pos<<1|1].lv){
		t[pos].sum=max(t[pos].sum,t[pos<<1].lenr+t[pos<<1|1].lenl);
		if(t[pos<<1].sum==t[pos<<1].len){
			t[pos].lenl=t[pos<<1].sum+t[pos<<1|1].lenl;
		}
		if(t[pos<<1|1].sum==t[pos<<1|1].len){
			t[pos].lenr=t[pos<<1|1].sum+t[pos<<1].lenr;
		}
	}
}
void build(int l,int r,int pos){
	t[pos].len=(r-l+1);
	if(l==r){
		t[pos].lv=t[pos].rv=1;
		t[pos].lenl=t[pos].lenr=1;
		t[pos].sum=1;
		return;
	}
	int mid=(l+r)/2;
	build(l,mid,pos<<1);
	build(mid+1,r,pos<<1|1);
	pushup(pos);
}
void change(int x,int l,int r,int pos){
	if(l==r){
		t[pos].lv^=1;
		t[pos].rv=t[pos].lv;
		return;
	}
	int mid=(l+r)/2;
	if(x<=mid) change(x,l,mid,pos<<1);
	if(x>mid) change(x,mid+1,r,pos<<1|1);
	pushup(pos);
}
int main(void){
	scanf("%d %d",&n,&m);
	build(1,n,1);
	int x;
	while(m--){
		scanf("%d",&x);
		change(x,1,n,1);
		printf("%d\n",max(t[1].sum,max(t[1].lenl,t[1].lenr)));
	}
}
2020/7/22 20:24
加载中...