代码求调
  • 板块CF1732E Location
  • 楼主L_zaa_L
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/4 11:45
  • 上次更新2024/3/4 16:48:03
查看原帖
代码求调
716965
L_zaa_L楼主2024/3/4 11:45
#include<bits/stdc++.h>
#define int long long
#define ls(x) ((x)*2)
#define rs(x) ((x)*2+1)
#define Debug(...) fprintf(stderr, __VA_ARGS__)
#define For(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define Rof(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define rep(i,  b) for(int i=1,i##end=b;i<=i##end;i++)
using namespace std;
const int N=5e4+5;
//char buf[(1<<21)+5],*p1,*p2;
//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline void chmx(int &x,int y){(x<y)&&(x=y);}
inline void chmn(int &x,int y){(x>y)&&(x=y);}
//inline void Add(int &x,int y){(x=x+y+Mod)%Mod;}
inline int read(){
	int f=0,x=0;
	char ch=getchar();
	while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}
	while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return f?-x:x;
}
int n,q,B;
int L[N],R[N],kuai[N];
int a[N],b[N];
int minx[N],maxx[N];
int tag[N],mn[305][N];
 
vector<int>divs[N];
inline void init(){
	for(int i=1;i<N;i++)
		for(int j=i;j<N;j+=i)
			divs[j].emplace_back(i);
}
inline int calc(int x,int y){if(x==0||y==0) return 1e16;return x/__gcd(x,y)*y/__gcd(x,y);}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	// ios::sync_with_stdio(false);
	// cin.tie(0); cout.tie(0);
	n=read(),q=read();
	B=sqrt(n);
	for(int i=1;i<=n;i++) a[i]=read();
	for(int i=1;i<=n;i++) b[i]=read();
	int num=B;
	b[0]=1e16;
	for(int i=1;i<=B;i++){
		L[i]=(i-1)*B+1,R[i]=i*B;
		tag[i]=-1;
		minx[i]=1e16;
		maxx[i]=1e16;
		for(int j=L[i];j<=R[i];j++){
			kuai[j]=i;
			chmn(minx[i],calc(a[j],b[j]));
			chmn(maxx[i],b[j]);
		}
	}
	if(num*B<n){
		num++;
		L[num]=(num-1)*B+1;
		R[num]=n;
		tag[num]=-1;
		minx[num]=1e16;
		maxx[num]=1e16;
		for(int j=L[num];j<=R[num];j++){
			kuai[j]=num;
			chmn(minx[num],calc(a[j],b[j]));
			chmn(maxx[num],b[j]);
		}
	}
	init();
	for(int i=0;i<=num;i++){
		for(int j=0;j<N;j++) mn[i][j]=1e16;
	}
	for(int i=1;i<=n;i++){
		int x=b[i];
		for(auto v:divs[x]){
			for(int k=v;k<N;k+=v)
			chmn(mn[kuai[i]][k],calc(k,x));
		}
	}
	while(q--){
		int op=read();
		if(op==1){
			int l=read(),r=read(),x=read();
			if(kuai[l]==kuai[r]){
				minx[kuai[l]]=1e16;
				if(tag[kuai[l]]!=-1)for(int i=L[kuai[l]];i<=R[kuai[l]];i++) a[i]=tag[kuai[l]];
				tag[kuai[l]]=-1;
				for(int i=l;i<=r;i++) a[i]=x;
				for(int i=L[kuai[l]];i<=R[kuai[l]];i++){
					chmn(minx[kuai[l]],calc(a[i],b[i]));
				}
			}
			else{
				minx[kuai[l]]=1e16;
				if(tag[kuai[l]]!=-1)for(int i=L[kuai[l]];i<=R[kuai[l]];i++) a[i]=tag[kuai[l]];
				tag[kuai[l]]=-1;
				for(int i=l;i<=R[kuai[l]];i++)a[i]=x;
				for(int i=L[kuai[l]];i<=R[kuai[l]];i++)
					chmn(minx[kuai[l]],calc(a[i],b[i]));
				minx[kuai[r]]=1e16;
				if(tag[kuai[r]]!=-1)for(int i=L[kuai[r]];i<=R[kuai[r]];i++) a[i]=tag[kuai[r]];
				tag[kuai[r]]=-1;
				for(int i=L[kuai[r]];i<=r;i++)a[i]=x;
				for(int i=L[kuai[r]];i<=R[kuai[r]];i++)
					chmn(minx[kuai[r]],calc(a[i],b[i]));
				for(int i=kuai[l]+1;i<kuai[r];i++) tag[i]=x;
			}
		}
		else{
			int l=read(),r=read();
			int ans=1e16;
			if(kuai[l]==kuai[r]){
				for(int i=l;i<=r;i++){
					if(tag[kuai[l]]==-1)ans=min(ans,calc(a[i],b[i]));
					else ans=min(ans,calc(tag[kuai[l]],b[i]));
				}
			}
			else{
				
				for(int i=l;i<=R[kuai[l]];i++){
					if(tag[kuai[l]]==-1)ans=min(ans,calc(a[i],b[i]));
					else ans=min(ans,calc(tag[kuai[l]],b[i]));
				}
				for(int i=L[kuai[r]];i<=r;i++){
					if(tag[kuai[r]]==-1)ans=min(ans,calc(a[i],b[i]));
					else ans=min(ans,calc(tag[kuai[r]],b[i]));
				}
				for(int i=kuai[l]+1;i<kuai[r];i++){
					if(tag[i]!=-1){
						if(mn[i][tag[i]]<=N)ans=min(ans,mn[i][tag[i]]);
						else ans=min(ans,calc(tag[i],maxx[i]));
					}
					else{
						ans=min(ans,minx[i]);
					}
				}
				
			}
			printf("%lld\n",ans);
		}
	}
#ifdef LOCAL
    Debug("\nMy Time: %.3lfms\n", (double)clock() / CLOCKS_PER_SEC);
#endif
	return 0;
}
2024/3/4 11:45
加载中...