分块40分,其余全wa
查看原帖
分块40分,其余全wa
936616
zibenlun楼主2024/3/11 15:45
#include<bits/stdc++.h>
#define ll long long
#define int long long
#define int_128 __int128
#define lowbit(x) (x&(-x))
using namespace std;
inline int read() {
	int s=0;
	char ch=getchar();
	while(ch<'0'||ch>'9') ch=getchar();
	while(ch>='0'&&ch<='9') {
		s=(s<<3)+(s<<1)+(ch^48);
		ch=getchar();
	}
	return s;
}
inline void write(int x) {
	if(x<0) putchar('-'),x=-x;
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
int pos[2000005],n,m,len;
char a[2000005];
struct nd{
	int l,r,lsize,rsize,maxx;
}c[50005];
void jisuan(int x){
	int cnt=1,maxx=1;
	for(int i=c[pos[x]].l+1;i<=c[pos[x]].r;i++){
		if(a[i]!=a[i-1]){
			cnt++;
		}
		else {
			maxx=max(maxx,cnt);
			if(i-cnt+1==c[pos[x]].l){
				c[pos[x]].lsize=cnt;
			}
			cnt=1;
		}
	}
	c[pos[x]].rsize=cnt;
	c[pos[x]].maxx=max(maxx,cnt);
}
void check(){
	int ans=c[1].maxx,cnt=c[1].rsize;
	for(int i=2;c[i+1].l;i++){
		ans=max(ans,c[i].maxx);
		ans=max(ans,c[i].rsize);
		ans=max(ans,c[i].lsize);
		if(a[c[i].l]!=a[c[i-1].r]){
			cnt+=c[i].lsize;
			ans=max(ans,cnt);
			if(c[i].lsize!=len){
				cnt=c[i].rsize;
			}
		}
//		cout<<i<<endl;
	}
	cout<<ans<<"\n";
}
signed main() {
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	len=447;
	for(int i=1;i<=n;i++){
		a[i]='L';
		pos[i]=i/len+(i%len!=0);
		if(i%len==1){ 
			c[pos[i]].l=i;
		}
		c[pos[i]].r=i;
		c[pos[i]].maxx=1;
		c[pos[i]].lsize=1;
		c[pos[i]].rsize=1;
	}
	for(int i=1;i<=m;i++){
		int x;
		cin>>x;
		if(a[x]=='L') a[x]='R';
		else a[x]='L';
		jisuan(x);
		check();
	}
	return 0;
}
2024/3/11 15:45
加载中...