1 #include"bits/stdc++.h" 2 #define db double 3 #define ll long long 4 #define vec vector<ll> 5 #define Mt vector<vec> 6 #define ci(x) scanf("%d",&x) 7 #define cd(x) scanf("%lf",&x) 8 #define cl(x) scanf("%lld",&x) 9 #define pi(x) printf("%d ",x) 10 #define pd(x) printf("%f ",x) 11 #define pl(x) printf("%lld ",x) 12 using namespace std; 13 const int N = 1e6 + 5; 14 int a[N],b[N],s[1010][1010],n; //s[x][y]表示对于所有a[i]==x时的b[i]%a[i]余数大于等于y的数目 15 ll ret; 16 bool check(ll x,ll k) 17 { 18 ll ans=ret*-1; 19 for(int i=1; i<=1000; i++) 20 { 21 ans+=x/i*s[i][0]; //s[i][0]为a数组中等于i的数的个数 22 ans-=s[i][x%i+1]; //减掉所有 c1<c2 的情况 23 } 24 return ans>=k; 25 } 26 ll cal(ll x) 27 { 28 ll l=1,r=1e13,mid; 29 ll res=l; 30 while(l<=r) 31 { 32 mid=(l+r)>>1; 33 if(check(mid,x)) res=mid,r=mid-1; 34 else l=mid+1; 35 } 36 return res; 37 } 38 int main() 39 { 40 int TA,T,x,y,z; 41 scanf("%d",&TA); 42 while(TA--) 43 { 44 scanf("%d%d",&n,&T); 45 ret=0; 46 memset(s,0, sizeof(s)); 47 for(int i=1; i<=n; i++) scanf("%d",&a[i]); 48 for(int i=1; i<=n; i++) scanf("%d",&b[i]),ret+=(b[i]/a[i]),s[a[i]][b[i]%a[i]]++; 49 for(int i=1; i<=1000; i++) 50 for(int j=i-1; j>=0; j--) 51 s[i][j]+=s[i][j+1]; 52 while(T--) 53 { 54 scanf("%d%d",&z,&x); 55 if(z==1) 56 { 57 scanf("%d",&y); 58 for(int i=b[x]%a[x]; i>=0; i--) s[a[x]][i]--; 59 for(int i=b[x]%y; i>=0; i--) s[y][i]++; 60 ret-=(b[x]/a[x]); 61 ret+=(b[x]/y); 62 a[x]=y; 63 } 64 else if(z==2) 65 { 66 scanf("%d",&y); 67 for(int i=b[x]%a[x]; i>=0; i--) s[a[x]][i]--; 68 for(int i=y%a[x]; i>=0; i--) s[a[x]][i]++; 69 ret-=(b[x]/a[x]); 70 ret+=(y/a[x]); 71 b[x]=y; 72 } 73 else 74 { 75 printf("%lld ",cal(1ll*x)); 76 } 77 } 78 } 79 }