首先設在整個數組內可以直接到達n+1的最左邊的點點為x

則x+1-n區間都可以一次或2次到達n+1

如果某一個點i可以一次到達n+1,則其i+a[i]大於等於n+1

否則可以先跳到i再跳到n+1,需要2步

然後將右邊界r賦值為x

繼續在區間[1,r-1]找一個可以直接到達x的點y

則區間[y,r-1]中能夠直接跳到r的點需要f[r]步,否則需要f[r]+1步

以此類推

#include<bits/stdc++.h>

using namespace std;

int n,m,a[100010],f[100010],g[100010];

int main(){

scanf("%d%d",&n,&m);

for(int i=1;i<=n;i++)

scanf("%d",&a[i]);

for(int i=1;i<=n;i++){

g[i]=i+a[i];

g[i]=max(g[i-1],g[i]);

}

int r=n+1;

while(r>1){

int l=lower_bound(g+1,g+n+1,r)-g;

while(l+a[l]<r)l++;

for(int i=l;i<r;i++){

if(i+a[i]>=r)f[i]=f[r]+1;

else f[i]=f[r]+2;

}

r=l;

}

for(int i=1;i<=m;i++){

int x;

scanf("%d",&x);

printf("%d ",f[x]);

}

}

jzoj1407的更多相关文章

随机推荐

  1. 相机拍摄时最重要的三个参数——光圈、快门、ISO

    注:这篇文章我四年前发布在其他地方,现在移过来. 如果你对相机只有很少了解,那么看这篇文章再好不过啦,我结合很多资料,力图用最通俗易懂的方式进行讲解. 相机拍摄时最重要的3个参数就是——光圈.快门.I ...

  2. vue1.0学习

    vue 一片html代码配合上json,在new出来vue实例 Demo:1 数据双向绑定(v-model="message",{{message}}) <div id=&q ...

  3. conn not captured

    线程 和 事件中 变量 not captured 把变量定义为 static 或者添加为全局变量(放在main之前)

  4. [SoapUI] 配置默认环境的properties

    <Envs> <Env id="Live,Default environment"> <Project> <CusProperty nam ...

  5. bat 调用exe

    @set errorlevel=>nul :reInput @echo 请输入批次号: @set/p 批次号= >nul @set 批次号|findstr "\\<%sea ...

  6. tty linux 打开和设置范例

    http://bbs.csdn.net/topics/340184140 /************************************************************** ...

  7. 继承方法-->call继承

    function Person(name,age,sex){ this.name = name; this.age = age; this.sex = sex; }function P1(name,a ...

  8. hdu 2153 仙人球的残影

    题目 这道题可以有两种写法: 第一种:找规律,如下: #include <stdio.h> int main() { int n,i,j,res; while (scanf("% ...

  9. eclipse 安装

    做一个项目,需要搭建环境.使用sql server 2005,tomcat,eclipse.过程真复杂,碰到些小问题,不过都解决了,还算顺利. win7下sql server 2005安装:http: ...

  10. Spring 注入集合类型

    定义了一个类: @Service public class StringTest implements CachedRowSet,SortedSet<String>,Cloneable @ ...