#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int to[200510],len[200510],sum[200510],a[200510];
struct part{int l,r;}k[200510];
int main(){
int n,m,siz=450,left=1,right=450,q,inp,x,y;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
k[i].l=left,k[i].r=right;
if(i==right)left=i+1,right=right+450;
}
for(int i=n;i>=1;i--){
if(k[i+a[i]].l!=k[i].l)sum[i]=1;
else sum[i]=sum[i+a[i]]+1;
}
for(int i=n;i>=1;i--){
if(k[i].l!=k[i+a[i]].l)
{if(!a[i+a[i]])to[i]=-1;else to[i]=i+a[i];}
else to[i]=to[i+a[i]];
}
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d",&inp);
if(inp==1){
scanf("%d",&x);x++;
long long ans=0;
for(int j=x;j!=-1;j=to[j]){
ans+=sum[j];
}
printf("%lld\n",ans);
}
if(inp==2){
scanf("%d%d",&x,&y);
x++;
a[x]=y;
if(x+a[x]>k[x].r){
to[x]=x+a[x];
sum[x]=1;
}
else{
to[x]=to[x+a[x]];
sum[x]=sum[x+a[x]]+1;
}
for(int j=x-1;j>=k[x].l;j--){
if(j+a[j]>k[x].r){
continue;
}
else{
to[j]=to[j+a[j]];
sum[j]=sum[j+a[j]]+1;
}
}
}
}
}
by Djangle162857 @ 2019-02-19 21:04:57
```cpp
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int to[200510],len[200510],sum[200510],a[200510];
struct part{int l,r;}k[200510];
int main(){
int n,m,siz=450,left=1,right=450,q,inp,x,y;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
k[i].l=left,k[i].r=right;
if(i==right)left=i+1,right=right+450;
}
for(int i=n;i>=1;i--){
if(k[i+a[i]].l!=k[i].l)sum[i]=1;
else sum[i]=sum[i+a[i]]+1;
}
for(int i=n;i>=1;i--){
if(k[i].l!=k[i+a[i]].l)
{if(!a[i+a[i]])to[i]=-1;else to[i]=i+a[i];}
else to[i]=to[i+a[i]];
}
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d",&inp);
if(inp==1){
scanf("%d",&x);x++;
long long ans=0;
for(int j=x;j!=-1;j=to[j]){
ans+=sum[j];
}
printf("%lld\n",ans);
}
if(inp==2){
scanf("%d%d",&x,&y);
x++;
a[x]=y;
if(x+a[x]>k[x].r){
to[x]=x+a[x];
sum[x]=1;
}
else{
to[x]=to[x+a[x]];
sum[x]=sum[x+a[x]]+1;
}
for(int j=x-1;j>=k[x].l;j--){
if(j+a[j]>k[x].r){
continue;
}
else{
to[j]=to[j+a[j]];
sum[j]=sum[j+a[j]]+1;
}
}
}
}
}
```
by Djangle162857 @ 2019-02-19 21:06:25
请不要用 **_Markdown_** 强调头文件的重要性……
希望更丰富的展现?使用[Markdown](https://www.luogu.org/wiki/show?name=%E5%B8%AE%E5%8A%A9%EF%BC%9Amarkdown)
by Kuriyama_Mirai @ 2019-02-19 21:07:31