提交时间:2024-10-04 13:12:02
运行 ID: 33066
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define p_b push_back #define m_p make_pair typedef long long ll; using namespace std; const int maxn=1e5+10,mod=998244353; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,a[maxn],b[maxn]; vector<int>D[maxn]; struct sgt { struct nd { int ls,rs,mn; }d[maxn*600]; int rt[maxn],ct; #define ls(p) d[p].ls #define rs(p) d[p].rs #define mn(p) d[p].mn void modify(int l,int s,int t,int &p,int x){ if(!p)p=++ct,mn(p)=1e9;mn(p)=min(mn(p),x);if(s==t)return; int mid=s+t>>1; if(l<=mid)modify(l,s,mid,ls(p),x);else modify(l,mid+1,t,rs(p),x); }int qry(int l,int r,int s,int t,int p){ if(!p)return 1e9; if(l<=s&&t<=r)return mn(p); int mid=s+t>>1,res=1e9; if(l<=mid)res=min(res,qry(l,r,s,mid,ls(p)));if(r>=mid+1)res=min(res,qry(l,r,mid+1,t,rs(p))); return res; } #undef ls #undef rs #undef mn }T; ll g(int l,int r,int x){ ll res=1e18; for(int y:D[x]){ int val=T.qry(l,r,1,n,T.rt[y]); if(val==int(1e9))continue; res=min(res,val*1ll*x/y/y); if(res==1)break; }//cout<<"? "<<l<<" "<<r<<" "<<x<<" "<<res<<endl; return res; } int gcd(int x,int y){return ((!y)?x:gcd(y,x%y));} ll calc(int x,int y){return x*1ll*y/gcd(x,y)/gcd(x,y);} struct SegTree { struct node { int L,R; int lz; ll mn; }d[maxn<<2]; #define mn(p) d[p].mn #define lz(p) d[p].lz #define L(p) d[p].L #define R(p) d[p].R #define ls(p) (p<<1) #define rs(p) (p<<1|1) void cl(int p,int x){lz(p)=x;mn(p)=g(L(p),R(p),x);} void pd(int p){if(lz(p)==-1)return;cl(ls(p),lz(p)),cl(rs(p),lz(p));lz(p)=-1;} void pu(int p){mn(p)=min(mn(ls(p)),mn(rs(p)));} void bd(int l,int r,int p){lz(p)=-1;L(p)=l,R(p)=r; if(l==r){ mn(p)=calc(a[l],b[l]);return; }int mid=l+r>>1; bd(l,mid,ls(p)),bd(mid+1,r,rs(p));pu(p); }void modify(int l,int r,int s,int t,int p,int x){ if(l<=s&&t<=r){cl(p,x);return;}pd(p); int mid=s+t>>1; if(l<=mid)modify(l,r,s,mid,ls(p),x);if(r>=mid+1)modify(l,r,mid+1,t,rs(p),x);pu(p); }ll qry(int l,int r,int s,int t,int p){ if(l<=s&&t<=r)return mn(p);pd(p); int mid=s+t>>1;ll res=1e18; if(l<=mid)res=min(res,qry(l,r,s,mid,ls(p)));if(r>=mid+1)res=min(res,qry(l,r,mid+1,t,rs(p))); return res; } }Tree; void slv(){ n=read();int q=read(); up(i,1,n)a[i]=read(); up(i,1,n)b[i]=read(); up(i,1,1e5)for(int j=i;j<=1e5;j+=i)D[j].p_b(i); up(i,1,n)for(int x:D[b[i]])T.modify(i,1,n,T.rt[x],b[i]); Tree.bd(1,n,1); while(q--){ int op=read(),l=read(),r=read(); if(op==1){ int x=read();Tree.modify(l,r,1,n,1,x); }else { printf("%lld\n",Tree.qry(l,r,1,n,1)); } } }int main(){ //freopen("pal.in","r",stdin); //freopen("pal.out","w",stdout); slv(); fclose(stdin); fclose(stdout); //cerr<<clock()*1.0/CLOCKS_PER_SEC<<"s\n"; //cerr<<"ct : "<<T.ct<<"\n"; return 0; }