//1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
int t,n;
#define mid ((l+r)/2)
const int maxn=1e6+10;
ll tree[maxn];
ll lowbit(ll k)
{
return k & -k;
}
void add(ll x,ll k)
{
while(x<=n)
{
tree[x]+=k;
x+=lowbit(x);
}
}
ll sum(ll x)
{
ll ans=0;
while(x!=0)
{
ans+=tree[x];
x-=lowbit(x);
}
return ans;
}
ll sums(ll l,ll r)
{
return sum(r)-sum(l-1);
}
void solve()
{
cin>>n;
for(int i=1; i<=n; i++)
{
tree[i]=0;
}
for(int i=1; i<=n; i++)
{
int x;
cin>>x;
add(i,x);
}
int q;
cin>>q;
while(q--)
{
int op;
cin>>op;
if(op==1)
{
int x,y;
cin>>x>>y;
ll d=sums(x,x);
add(x,y-d);
}
else
{
ll x;
cin>>x;
ll l=0,r=n,ans=0;
while(r>=l)
{
if(x>=sum(mid))ans=mid,l=mid+1;
else r=mid-1;
}
printf("%lld %lld\n",ans,(sum(n)+x-1)/x);
}
}
}
int main()
{
cin>>t;
while(t--)
solve();
return 0;
}
#include <bits/stdc++.h>
using namespace std;
# define mod 1000000007
typedef long long int ll;
ll sum[100000*2+10];
ll a[100000*2+10];
int lowbit(int x)
{
return x&(-x);
}
ll getsum(int pos)
{
ll ans=0;
while(pos)
{
ans+=sum[pos];
pos-=lowbit(pos);
}
return ans;
}
void change(int pos,int v,int n)
{
int cha=v-a[pos];
while(pos<=n)
{
sum[pos]+=cha;
pos+=lowbit(pos);
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
sum[i]=0;
}
for(int i=1; i<=n; i++)
{
a[i]=0;
int x;
scanf("%d",&x);
change(i,x,n);
a[i]=x;
}
int m;
scanf("%d",&m);
while(m--)
{
int p;
scanf("%d",&p);
if(p==1)
{
int pos,d;
scanf("%d%d",&pos,&d);
change(pos,d,n);
a[pos]=d;
}
else
{
int g;
scanf("%d",&g);
ll temp=0,tempsum=0;
int left=1;
int right=n;
while(left<=right)
{
int mid=(left+right)>>1;
if(getsum(mid)>g)
right=mid-1;
else
left=mid+1;
}
ll ans=0;
ll summ=getsum(n);
ans=summ/g;
if(summ%g)
ans++;
cout<<right<<" "<<ans<<'\n';
}
}
}
return 0;
}