- 教主的游乐场
- 2018-05-09 21:51:33 @
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
int a[100000],b[100000];
using namespace std;
void cz(int i,int j)//从i到j个设施走的最短步数
{
for(int k=i+1;k<j;k++)
{
if(a[k]<j)
b[k]=b[i]+1;
if(a[k]>=j)
b[k]=b[j]+1;
}
}
void cx(int n)
{
for(int i=0;i<n;i++)
{
if(a[i]>=n)
{
b[i]=b[n]+1;
cz(i,n);
cx(i);
break;
}
}
}
int main()
{
int n,m,i;
memset(b,0,sizeof(b));
while(~scanf("%d %d",&n,&m))
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]+=i;
}
cx(n+1);
int x;
for(i=0;i<m;i++)
{
scanf("%d",&x);
printf("%d%c",b[x],i==m-1?'\n':' ');
}
}
return 0;
}
1 条评论
-
x_w_x LV 8 @ 2018-05-10 21:12:46
原来是数组开小了
- 1