这玩意常数真的好大。
#include <bits/stdc++.h>
using namespace std;
inline int read(){
int x=0;bool f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=0;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?x:-x;
}
inline void out(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) out(x/10);
putchar(x%10|48);
}
int n,m,block,a[100005],bl[100005],f[100005],g[100005],I,J,K;
void add(int pos,int x){
a[pos]=x;
for(int i=min(n,bl[pos]*block);i>(bl[pos]-1)*block;i--)
if(i+a[i]<=min(bl[i]*block,n))
f[i]=f[i+a[i]]+1,g[i]=g[i+a[i]];
else
f[i]=1,g[i]=i+a[i];
}
int main(){
n=read(),m=read();
block=sqrt(n);
for(int i=1;i<=n;i++)
a[i]=read(),bl[i]=(i-1)/block+1;
for(int i=n;i;i--)
if(i+a[i]<=bl[i]*block)
f[i]=f[i+a[i]]+1,g[i]=g[i+a[i]];
else
f[i]=1,g[i]=i+a[i];
while(m--){
I=read(),J=read();
if(I){
int ans=0;
for(int i=J;i<=n;i=g[i])
ans+=f[i];
while(J+a[J]<=n)
J+=a[J];
out(J),putchar(' '),out(ans),putchar(10);
}
else{
K=read();
add(J,K);
}
}
return 0;
}