正题

评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P3203


题目大意

nnn个装置。到第iii个装置会被往前弹aia_iai​个。
两种操作
修改aia_iai​和询问从iii出发要多少次弹射可以弹出去。


解题思路

分块。对于每个点,维护要多少步弹出该块和弹出去后弹到哪里。
询问就直接根据两个数据,修改就直接重构整个块。

时间复杂度:O(nn)O(n\sqrt n)O(nn​)


code

#include<cstdio>
#include<cmath>
#define N 200010
#define T 500
using namespace std;
int n,m,x,t,a[N],L[T],R[T],step[N],to[N],pos[N];
void pre_work()//预处理
{for(int i=1;i<=t;i++)//块边界{L[i]=(i-1)*t+1;R[i]=i*t;}if(R[t]!=n) t++,L[t]=R[t-1]+1,R[t]=n;for(int i=1;i<=t;i++)for(int j=R[i];j>=L[i];j--){if(j+a[j]<=R[i]) step[j]=step[j+a[j]]+1,to[j]=to[j+a[j]];else step[j]=1,to[j]=j+a[j];pos[j]=i;}//初始数据
}
int ask(int x)//询问
{int ans=0;while(x<=n)ans+=step[x],x=to[x];return ans;
}
void change(int i)//重构块
{for(int j=R[i];j>=L[i];j--)if(j+a[j]<=R[i]) step[j]=step[j+a[j]]+1,to[j]=to[j+a[j]];else step[j]=1,to[j]=j+a[j];
}
int main()
{scanf("%d",&n);t=sqrt(n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);pre_work();scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d",&x);if(x==1){scanf("%d",&x);x++;printf("%d\n",ask(x));}else{scanf("%d",&x);x++;scanf("%d",&a[x]);change(pos[x]);}}
}

P3203-[HNOI2010]弹飞绵羊【分块】相关推荐

  1. P3203 [HNOI2010]弹飞绵羊

    P3203 [HNOI2010]弹飞绵羊 题目描述 详见:P3203 [HNOI2010]弹飞绵羊 solution 这是一道LCT的裸题. 但是我并不想用LCT解决此题(In fact 是不会LCT ...

  2. luogu P3203 [HNOI2010]弹飞绵羊(LCT ? 暴力分块 ! )

    整理的算法模板合集: ACM模板 已知:暴力 + 暴力 + 10510^5105 = 分块 设 need[i] 表示从 i 开始,跳出所在块的步数:ver[i] 表示跳出当前所在的块后到了哪里: 罗老 ...

  3. BZOJ 2002 HNOI2010 弹飞绵羊 分块

    题目大意及LCT版本题解:见 http://blog.csdn.net/popoqqq/article/details/38849471 今天手滑用分块又重写了一遍这道题0.0 分块就是短啊 将弹簧分 ...

  4. 洛谷-P3203 弹飞绵羊 分块

    题目 题目链接 题意 据说这道题要用一道叫做LCT的数据结构,然而我不会... 一排有n个弹簧装置,从第iii个可一往后跳k[i]" role="presentation" ...

  5. BZOJ-2002-Bounce弹飞绵羊-分块

    描述 Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞.绵羊想知 ...

  6. 【HNOI 2010】Bounce 弹飞绵羊 分块

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

  7. [HNOI2010]弹飞绵羊

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

  8. HNOI2010——弹飞绵羊(lct)

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

  9. BZOJ P2002 [HNOI2010] 弹飞绵羊【分块】

    这道题就很优秀了.考试的时候完全没想到正解,最后写了一个暴力20分- 直接讲分块吧.我们预处理两个数组 S t e p [ ] , G e t [ ] Step[],Get[] Step[],Get[ ...

  10. BZOJ 2002 Bounce 弹飞绵羊 [分块]

    本身是一道lct裸题,为了证明分块的优越性,可用性,强行写了一波不擅长的分块...GG 分块思路很优秀,每个点记录跳出分块的步数以及跳到下一分块的哪个点 #include<cmath> # ...

最新文章

  1. 从源码分析DEARGUI之add_tree_node
  2. 搜集的一些项目源码,改改就能用
  3. 传统IDC转型有了新思路 Zstack除了混合云还有托管云
  4. POJ 3084 Panic Room
  5. Android之安卓8.0版本以上手机开启热点提示Caller already has an active LocalOnlyHotspot request
  6. php拼接xml特殊字符不显示,使用PHP的XML特殊字符
  7. 三星linux打印机驱动官网下载,三星SL-C515驱动
  8. [开源第一波]SmartScript
  9. 用户空间缺页异常pte_handle_fault()分析--(上)【转】
  10. Objective-C与Swift下的自定义打印函数(Debug和Release)
  11. java date类1900,java - 使用javax.validation验证日期不得少于1900-01-01 - 堆栈内存溢出...
  12. C++对ascii文件按行和分隔符读取并显示
  13. EXPLAIN查看SQL执行计划
  14. 电工与电子技术基础【2】
  15. 越南edu学生校园校友邮箱申请UNIDAYS学生认证登录Apple music原创教程
  16. linux文件损坏怎么修复工具,在Ubuntu操作系统下修复损坏程序包的三种办法
  17. 用科傻软件,求平面网和高程网的平差
  18. ROS自定义消息类型,编译无法生成 msg/srv 文件产生的头文件
  19. redis 运维讲解01
  20. 三阶段--017Day 模块 Requirejs

热门文章

  1. html省市区选择器代码,js实现一个省市区三级联动选择框代码分享
  2. java并行流 阻塞主线程_多线程入门案例与java8的并行流
  3. html站点如何命名,html页面的CSS、DIV命名规则
  4. tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端
  5. leetcode617. 合并二叉树
  6. C++ 学习之旅(14)——构造函数constructors和析构函数destructors
  7. 数据结构与索引-- B+树索引
  8. python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法
  9. c++ 多核cpu序列号_关于 CPU 的一些基本知识总结
  10. python输出文本 去掉引号_Python可以在文本文件中读取时从字符串中删除双引号吗?...