#include<cstdio>
#include<cmath>
int step[200020],to[200020],bel[200020],val[200020],st[512],ed[512];
int n,m,bl;
void upd(int l,int r){
for(int i=r;i>=l;--i){
if(i+val[i]>ed[bel[i]]){
to[i]=i+val[i];
step[i]=1;
}else{
to[i]=to[i+val[i]];
step[i]=step[i+val[i]]+1;
}
}
}
void init(){
for(int i=1;i<=bl;++i){
st[i]=n/bl*(i-1)+1;
ed[i]=n/bl*i;
}
ed[bl]=n;
for(int i=1;i<=bl;++i)
for(int j=st[i];j<=ed[i];++j)
bel[j]=i;
upd(1,n);
}
int ask(int x){
int res=0;
while(x<=n){
res+=step[x];
x=to[x];
}
return res;
}
int main(){
scanf("%d",&n);
bl=sqrt(n);
for(int i=1;i<=n;++i)
scanf("%d",&val[i]);
init();
scanf("%d",&m);
while(m--){
int o,x,y;
scanf("%d",&o);
if(o==1){
scanf("%d",&x);
printf("%d\n",ask(x));
}else{
scanf("%d%d",&x,&y);
val[x]=y;
upd(st[bel[x]],ed[bel[x]]);
}
}
return 0;
}
3 5 6 T 了,目测被卡常数
其他的 WA