#include<cstdio>
#include<algorithm>
#define N 200010
using namespace std;
int fa[N],ch[N][2],tag[N],siz[N],k[N],st[N],next[N];
int n,m;
inline void up(int x)
{
siz[x]=siz[ch[x][1]]+siz[ch[x][0]]+1;
}
inline void down(int x)
{
if(tag[x])
{
tag[x]^=1;tag[ch[x][0]]^=1;tag[ch[x][1]]^=1;
swap(ch[x][0],ch[x][1]);
}
}
inline bool isroot(int x)
{
return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;
}
inline void rotate(int x)
{
int y=fa[x],z=fa[y],l,r=0;
if(ch[y][0]==x) l=0; else l=1;
r=l^1;
if(!isroot(y))
{
if(ch[z][0]==y) ch[z][0]=x; else ch[z][1]=x;
}
ch[y][l]=ch[x][r];ch[x][r]=y;
fa[y]=x;fa[ch[y][l]]=y;fa[x]=z;
up(y);
}
inline void splay(int x)
{
int t=0;st[++t]=x;
for(int i=x;!isroot(i);i=fa[i]) st[++t]=fa[i];
for(int i=t;i;i--) down(st[i]);
while(!isroot(x))
{
int y=fa[x],z=fa[y];
if(!isroot(y))
{
if(ch[y][0]==x^ch[z][0]==y) rotate(x);
else rotate(y);
}
rotate(x);
up(x);
}
}
inline void access(int x)
{
int t=0;
while(x)
{
splay(x);
ch[x][1]=t;
t=x;x=fa[x];
}
}
inline void make_root(int x)
{
access(x);
splay(x);
tag[x]^=1;
}
inline void link(int x,int y)
{
make_root(x);
fa[x]=y;
splay(x);
}
inline void cut(int x,int y)
{
make_root(y);
access(x);
splay(x);
ch[x][0]=fa[y]=0;
}
int main()
{
scanf("%d",&n);
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
fa[i]=x+i;siz[i]=1;
if(fa[i]>n+1)fa[i]=n+1;
next[i]=fa[i];
}
siz[n+1]=1;
int p,y;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d",&p);
if(p==1)
{
scanf("%d",&x);
make_root(n+1);
x++;
access(x);splay(x);printf("%d\n",siz[ch[x][0]]);
}
else
{
scanf("%d%d",&x,&y);x++;
int t=min(n+1,x+y);
cut(x,next[x]);link(x,t);next[x]=t;
}
}
}