题目链接

/*
分块,维护从某位置跳到下一个块需要多少步
*/
#include<cmath>
#include<cstdio>
#include<cctype>
using namespace std;
const int N=2e6+5; int n,v[N],belong[N],size,tot,step[N]/*跳出这个块需要多少步*/,nxt[N]/*最后跳到这块的哪*/; inline int read()
{
int now=0,f=1;register char c=getchar();
for(;!isdigit(c);c=getchar())
if(c=='-') f=-1;
for(;isdigit(c);now=now*10+c-'0',c=getchar());
return now*f;
} void Modify(int p)
{
int val=read();
v[p]=val;
//不能只改一个点!因为同一块中,前面是由后面得到的,且维护的nxt[aft],即aft跳到下一个块的位置,所以必须从pos往前再更新一遍
for(int i=p;i>(belong[p]-1)*size;--i)
{
int aft=i+v[i];
if(aft>n)//可能会在边界
step[i]=1, nxt[i]=n+1;
else if(belong[aft]!=belong[i])
step[i]=1, nxt[i]=aft;
else
step[i]=step[aft]+1, nxt[i]=nxt[aft];
}
// printf("Modify %d:v:%d aft:%d step:%d nxt:%d\n",p,v[p],aft,step[p],nxt[p]);
}
int Query(int p)
{
int res=0;
while(p<=n)
// printf("pos:%d step:%d nxt:%d\n",p,step[p],nxt[p]),
res+=step[p], p=nxt[p];
return res;
} int main()
{
// freopen("bzoj_2002.in","r",stdin);
// freopen("bzoj_2002.out","w",stdout); n=read();size=sqrt(n);
// tot=size;//n/size = n/sqrt(n) = sqrt(n) = size
// if(n%size) ++tot;
for(int i=1;i<=n;++i)
v[i]=read(), belong[i]=(i-1)/size+1;
for(int i=n;i;--i)//逆序做,这样就能利用前边得到的值O(1)得到某结果
{
int aft=i+v[i];
if(aft>n)
step[i]=1, nxt[i]=n+1;
else if(belong[aft]!=belong[i])
step[i]=1, nxt[i]=aft;
else
step[i]=step[aft]+1, nxt[i]=nxt[aft];
// printf("%d:v:%d aft:%d step:%d nxt:%d\n",i,v[i],aft,step[i],nxt[i]);
}
int m=read(),opt,p;
while(m--)
{
opt=read(),p=read()+1;
if(opt==1)
printf("%d\n",Query(p));
else
Modify(p);
} // fclose(stdin);fclose(stdout);
return 0;
}

COGS.1689.[HNOI2010]Bounce 弹飞绵羊(分块)的更多相关文章

  1. 数据结构(块状链表):COGS 1689. [HNOI2010]Bounce 弹飞绵羊

    时间限制:1 s   内存限制:259 MB [题目描述] 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地 ...

  2. 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊 分块

    [bzoj2002][Hnoi2010]Bounce 弹飞绵羊 2014年7月30日8101 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀 ...

  3. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 分块

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOn ...

  4. 【BZOJ2002】 [Hnoi2010]Bounce 弹飞绵羊 分块/LCT

    Description 某天,Lostmonkey发明了一种超级弹力装置,为了在 他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装 ...

  5. bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 [分块][LCT]

    Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...

  6. [bzoj2002][Hnoi2010]Bounce弹飞绵羊——分块

    Brief description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装 ...

  7. bzoj2002 [Hnoi2010]Bounce 弹飞绵羊——分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 第一次用分块,感觉超方便啊: 如果记录每个点的弹力系数,那么是O(1)修改O(n)查询 ...

  8. B2002 [Hnoi2010]Bounce 弹飞绵羊 分块

    原来做过,看大家都做这道题都热情高涨,沈爷爷debug这道题4天,作为告诉他这个题的人,我还有点不好意思...我自己也就做了一个小时. 其实这个题思路还好,就是维护每个点的出块次数和跳出块的位置,然后 ...

  9. bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 分块

    这个题体现了分块不只是最大值最小值众数次数,而是一种清真的思想. 我们把整个序列分块,在每个块里处理每个位置跳出这个块的次数和跳出的位置,那么每次修改n0.5,每次查询也是,那么O(m* n0.5)的 ...

随机推荐

  1. js实现页面遮罩层,并且阻止页面body滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 基于 OpenSSL 的 CA 建立及证书签发

    http://rhythm-zju.blog.163.com/blog/static/310042008015115718637/ 建立 CA 建立 CA 目录结构 按照 OpenSSL 的默认配置建 ...

  3. python操作mysql数据库的常用方法使用详解

    python操作mysql数据库 1.环境准备: Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get instal ...

  4. vmware下centos克隆功能对网络的设置

    centos完成克隆功能后需要对网络进行设置 # cd /etc/udev/rules.d/ vim 70-persistent-net.rules 删除eth0的配置,将eth1该为eth0 编辑网 ...

  5. 目标检测--Scalable Object Detection using Deep Neural Networks(CVPR 2014)

    Scalable Object Detection using Deep Neural Networks 作者: Dumitru Erhan, Christian Szegedy, Alexander ...

  6. gulp-px2rem-plugin 插件的一个小bug

    最近在使用这个插件的过程中发现一个bug: 不支持 含有小数的形式. 查看源码后,修改了下其中的正则,使其支持小数形式(66.66px..6px ). 作者的源码最近一次更新都在两年前,所以就简单的记 ...

  7. webpack 3之hash、chunkhash和contenthash三者的区别

    在使用webpack 3中,文件名的hash值可以有三种hash生成方式,那具体使用哪一种呢? 1.hash 如果都使用hash的话,所有文件的hash都是一样的,而且每次修改任何一个文件,所有文件名 ...

  8. tensorflow-安装

    1.pip安装(最好在虚拟环境中安装) →更新pip:pip install --upgrade pip →安装最新版tensorflow(GPU):pip install tensorflow-gp ...

  9. python3 读取文件跳过文件第一行内容

    Python编程时,经常需要跳过第一行读取文件内容.比较容易想到是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作.相应的Python代码如下: #inp ...

  10. collectd+influxDB+Grafana搭建性能监控平台

    网上查看了很多关于环境搭建的文章,都比较久远了很多安装包源都不可用了,今天收集了很多资料组合尝试使用新版本来搭建,故在此记录. 采集数据(collectd)-> 存储数据(influxdb) - ...