P3203-[HNOI2010]弹飞绵羊【分块】
正题
评测记录: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]弹飞绵羊【分块】相关推荐
- P3203 [HNOI2010]弹飞绵羊
P3203 [HNOI2010]弹飞绵羊 题目描述 详见:P3203 [HNOI2010]弹飞绵羊 solution 这是一道LCT的裸题. 但是我并不想用LCT解决此题(In fact 是不会LCT ...
- luogu P3203 [HNOI2010]弹飞绵羊(LCT ? 暴力分块 ! )
整理的算法模板合集: ACM模板 已知:暴力 + 暴力 + 10510^5105 = 分块 设 need[i] 表示从 i 开始,跳出所在块的步数:ver[i] 表示跳出当前所在的块后到了哪里: 罗老 ...
- BZOJ 2002 HNOI2010 弹飞绵羊 分块
题目大意及LCT版本题解:见 http://blog.csdn.net/popoqqq/article/details/38849471 今天手滑用分块又重写了一遍这道题0.0 分块就是短啊 将弹簧分 ...
- 洛谷-P3203 弹飞绵羊 分块
题目 题目链接 题意 据说这道题要用一道叫做LCT的数据结构,然而我不会... 一排有n个弹簧装置,从第iii个可一往后跳k[i]" role="presentation" ...
- BZOJ-2002-Bounce弹飞绵羊-分块
描述 Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞.绵羊想知 ...
- 【HNOI 2010】Bounce 弹飞绵羊 分块
BZOJ Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置 ...
- [HNOI2010]弹飞绵羊
题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...
- HNOI2010——弹飞绵羊(lct)
某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当 ...
- BZOJ P2002 [HNOI2010] 弹飞绵羊【分块】
这道题就很优秀了.考试的时候完全没想到正解,最后写了一个暴力20分- 直接讲分块吧.我们预处理两个数组 S t e p [ ] , G e t [ ] Step[],Get[] Step[],Get[ ...
- BZOJ 2002 Bounce 弹飞绵羊 [分块]
本身是一道lct裸题,为了证明分块的优越性,可用性,强行写了一波不擅长的分块...GG 分块思路很优秀,每个点记录跳出分块的步数以及跳到下一分块的哪个点 #include<cmath> # ...
最新文章
- 从源码分析DEARGUI之add_tree_node
- 搜集的一些项目源码,改改就能用
- 传统IDC转型有了新思路 Zstack除了混合云还有托管云
- POJ 3084 Panic Room
- Android之安卓8.0版本以上手机开启热点提示Caller already has an active LocalOnlyHotspot request
- php拼接xml特殊字符不显示,使用PHP的XML特殊字符
- 三星linux打印机驱动官网下载,三星SL-C515驱动
- [开源第一波]SmartScript
- 用户空间缺页异常pte_handle_fault()分析--(上)【转】
- Objective-C与Swift下的自定义打印函数(Debug和Release)
- java date类1900,java - 使用javax.validation验证日期不得少于1900-01-01 - 堆栈内存溢出...
- C++对ascii文件按行和分隔符读取并显示
- EXPLAIN查看SQL执行计划
- 电工与电子技术基础【2】
- 越南edu学生校园校友邮箱申请UNIDAYS学生认证登录Apple music原创教程
- linux文件损坏怎么修复工具,在Ubuntu操作系统下修复损坏程序包的三种办法
- 用科傻软件,求平面网和高程网的平差
- ROS自定义消息类型,编译无法生成 msg/srv 文件产生的头文件
- redis 运维讲解01
- 三阶段--017Day 模块 Requirejs
热门文章
- html省市区选择器代码,js实现一个省市区三级联动选择框代码分享
- java并行流 阻塞主线程_多线程入门案例与java8的并行流
- html站点如何命名,html页面的CSS、DIV命名规则
- tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端
- leetcode617. 合并二叉树
- C++ 学习之旅(14)——构造函数constructors和析构函数destructors
- 数据结构与索引-- B+树索引
- python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法
- c++ 多核cpu序列号_关于 CPU 的一些基本知识总结
- python输出文本 去掉引号_Python可以在文本文件中读取时从字符串中删除双引号吗?...