提交时间:2024-10-04 14:18:40

运行 ID: 33105

#include <bits/stdc++.h> using namespace std; #define int long long int n,q; int a[200300],b[200300]; vector<int>d[200300]; vector<int>P; inline int gcd(int a,int b){ int az=__builtin_ctz(a); int bz=__builtin_ctz(b); int z=min(az,bz);b>>=bz; while(a){ a>>=az;int diff=a-b; az=__builtin_ctz(diff),b=min(a,b),a=abs(diff); } return b<<z; } inline int calc(int a,int b){ int t=gcd(a,b); return a/t*b/t; } const int C=1010; int mn[C][100030]; int tg[C],MN[1010]; const int SIZ=150; int bel[100300]; inline void atg(int id,int x){ tg[id]=x; MN[id]=mn[id][x]; } int L[C],R[C]; inline void pd(int id){ if(!tg[id])return ; for(int i=L[id];i<=R[id];i++) a[i]=tg[id]; tg[id]=0; } inline void upd(int id){ MN[id]=1e18; for(int i=L[id];i<=R[id];i++) MN[id]=min(MN[id],calc(a[i],b[i])); } inline void bd(int id){ upd(id); for(int i=1;i<=1e5;i++) mn[id][i]=1e11; for(int i=L[id];i<=R[id];i++){ for(int j:d[b[i]]) mn[id][j]=min(mn[id][j],b[i]/j); } for(int i=1;i<=1e5;i++) for(int j:P){ if(j*i>1e5)break; mn[id][i*j]=min(mn[id][i*j],mn[id][i]*j); } } signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); // freopen("pal.in","r",stdin); // freopen("pal.out","w",stdout); for(int i=1;i<=1e5;i++){ for(int j=1;j*j<=i;j++) if(i%j==0){ d[i].emplace_back(j); if(j*j!=i)d[i].emplace_back(i/j); } if(d[i].size()==2)P.push_back(i); } cin>>n>>q; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>b[i]; memset(L,0x3f,sizeof(L)); for(int i=1;i<=n;i++){ bel[i]=(i+SIZ-1)/SIZ; L[bel[i]]=min(L[bel[i]],i); R[bel[i]]=i; } for(int i=1;i<=bel[n];i++)bd(i); while(q--){ int op,l,r; cin>>op>>l>>r; if(op==1){ int x; cin>>x; for(int i=bel[l]+1;i<=bel[r]-1;i++)atg(i,x); if(bel[l]==bel[r]){ pd(bel[l]); for(int i=l;i<=r;i++) a[i]=x; upd(bel[l]); } else{ pd(bel[l]); pd(bel[r]); for(int i=l;i<=R[bel[l]];i++)a[i]=x; for(int i=L[bel[r]];i<=r;i++)a[i]=x; upd(bel[l]); upd(bel[r]); } } else{ int res=1e11; for(int i=bel[l]+1;i<=bel[r]-1;i++)res=min(res,MN[i]); if(bel[l]==bel[r]){ pd(bel[l]); for(int i=l;i<=r;i++) res=min(res,calc(a[i],b[i])); upd(bel[l]); } else{ pd(bel[l]); pd(bel[r]); for(int i=l;i<=R[bel[l]];i++) res=min(res,calc(a[i],b[i])); for(int i=L[bel[r]];i<=r;i++) res=min(res,calc(a[i],b[i])); } cout<<res<<"\n"; } } cout.flush(); return 0; }