分块WA求调(玄关)
查看原帖
分块WA求调(玄关)
1236806
wjr_jok楼主2024/3/13 21:32
#include<bits/stdc++.h>
using namespace std;
int n,m,jl,cnt=1;
int l[300001],r[300001],s[300001],cc[300001];
int ans[300001],x[300001],y[300001],fk[300001];
int main(){
	cin>>n>>m;
	for(int i=m;i>=1;i--){
		cin>>l[i]>>r[i]>>s[i];
	}
	for(int i=1;i<=(int)sqrt(n);i++){
		x[cnt]=(i-1)*(n/(int)sqrt(n))+1;
		y[cnt]=x[cnt]+(n/(int)sqrt(n))-1;
		for(int j=x[cnt];j<=y[cnt];j++){
			fk[j]=cnt;
		}
		cnt++;
	}
	if(n%(int)sqrt(n)){
		x[cnt]=pow((int)sqrt(n),2)+1;
		y[cnt]=n+1;
		for(int i=x[cnt];i<=y[cnt];i++){
			fk[i]=cnt;
		}
	}
	for(int i=1;i<=m;i++){
		jl=cc[s[i]];
		for(int j=l[i];j<=min(r[i],y[fk[l[i]]]);j++){
			cc[j]=i;
		}
		for(int j=max(l[i],x[fk[r[i]]]);j<=r[i];j++){
			cc[j]=i;
		}
		for(int j=fk[l[i]]+1;j<fk[r[i]];j++){
			ans[j]=i;
		}
		cc[s[i]]=jl;
	}
	for(int i=1;i<=n;i++){
		if(i!=s[ans[fk[i]]]){
			cout<<s[max(cc[i],ans[fk[i]])]<<" ";
		}
		else{
			cout<<s[cc[i]]<<" ";
		}
	}
	return 0;
}
2024/3/13 21:32
加载中...