#include<cstdio>
#include<algorithm>
const int N=1e5+2,M=318;
using namespace std;
int a[N],dp[N][M];
int main(){
int n,q,K;scanf("%d",&n),K=sqrt(n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
//预处理dp[n][k];
for(int k=1;k<=K;++k)
for(int j=n;j>=1;--j)
dp[j][k]=(j+a[j]+k>n)?(1):(dp[j+a[j]+k][k]+1);
scanf("%d",&q);
while(q--){
int j,k;scanf("%d%d",&j,&k);
if(k<=K) {printf("%d\n",dp[j][k]);continue;}
int ans=0;
while(j<=n) j=j+a[j]+k,++ans;
printf("%d\n",ans);
}
}
CF797E(Array Queries 预处理和询问分工配合 好题)
最新推荐文章于 2021-03-14 20:38:58 发布