#分块#洛谷 3203 弹飞绵羊
题目
在地上沿着一条直线摆上 n n n个装置,每个装置设定初始弹力系数 k i ki ki,当绵羊达到第 i i i个装置时,它会往后弹 k i ki ki步,达到第 i + k i i+ki i+ki个装置,若不存在第 i + k i i+ki i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第 i i i个装置起步时,被弹几次后会被弹飞。(带修改)
分析
首先正解是LCT(动态树LINK-CUT-TREE),但是问题是我太菜了,所以要用分块,设 f [ i ] f[i] f[i]为跳出块的步数, n x [ i ] nx[i] nx[i]为跳到块外的点,首先提前处理,对于询问跳着回答,块内修改
代码
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#define rr register
using namespace std;
int n,f[200001],nx[200001],pos[200001],l[200001],a[200001],bk;
inline signed iut(){rr int ans=0,f=1; rr char c=getchar();while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans*f;
}
inline void print(int ans){if (ans>9) print(ans/10);putchar(ans%10+48);
}
inline signed ask(int x){rr int ans=0;while (x<=n) ans+=f[x],x=nx[x];return ans;
}
inline void update(int x,int w){for (rr int i=l[pos[x]+1]-1;i>=l[pos[x]];--i)if (i+a[i]>=l[pos[i]+1]) f[i]=1,nx[i]=i+a[i];else f[i]=f[i+a[i]]+1,nx[i]=nx[i+a[i]];
}
signed main(){n=iut(); bk=sqrt(n);for (rr int i=1;i<=n;++i) a[i]=iut();for (rr int i=1;i<=n/bk;++i) l[i]=(i-1)*bk+1; l[n/bk+1]=n+1;for (rr int i=1;i<=n/bk;++i)for (rr int j=l[i];j<l[i+1];++j) pos[j]=i;for (rr int i=n;i;--i)if (i+a[i]>=l[pos[i]+1]) f[i]=1,nx[i]=i+a[i];else f[i]=f[i+a[i]]+1,nx[i]=nx[i+a[i]];for (rr int m=iut();m;--m){rr int q=iut(),x=iut()+1;if (q&1) print(ask(x)),putchar(10);else update(x,a[x]=iut());}return 0;
}
#分块#洛谷 3203 弹飞绵羊相关推荐
- 洛谷-P3203 弹飞绵羊 分块
题目 题目链接 题意 据说这道题要用一道叫做LCT的数据结构,然而我不会... 一排有n个弹簧装置,从第iii个可一往后跳k[i]" role="presentation" ...
- 洛谷P3203 弹飞绵羊
题目背景 搞不懂为什么大家伙都叫 弹(dan)飞绵羊 这道题我是用来点亮洛谷试炼场的分块模板的- 当然使用分块做的啊! 然后L_Y_T想了想,就右转题解了- 然后发现题解的代码可读性极差 于是就了解思 ...
- AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
[HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- HYSBZ - 2002 :Bounce 弹飞绵羊 (分块算法)
Bounce 弹飞绵羊 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 10761 Solved: 5542 [Su ...
- Bounce 弹飞绵羊
某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当 ...
- P3203 [HNOI2010]弹飞绵羊
P3203 [HNOI2010]弹飞绵羊 题目描述 详见:P3203 [HNOI2010]弹飞绵羊 solution 这是一道LCT的裸题. 但是我并不想用LCT解决此题(In fact 是不会LCT ...
- 题解-弹飞绵羊 (HNOI2015)
LCT 模板题,分块也很优秀. 分块做法 维护每个点到第一次跳到下一个块时的跳跃次数,并记录其跳到下一个块的第一个点. 注意常见的分块玄学操作 n = min(sqrt(N), 100) 和 n = ...
- bzoj 2002 Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 时间限制: 10 Sec 内存限制: 259 MB 提交: 16133 解决: 8253 题目描述 某天,Lostmonkey发明了一种 ...
最新文章
- 《Java 开发从入门到精通》—— 2.2 编写第一段Java程序
- 如何利用OpenCV寻找轮廓的中心?
- 小憩,味一二 ——08年3月编程手札
- PCA与SVD的关系
- listview winfrom 表头_winform ListView点击行表头,排序
- FFmpeg 5.0 正式发布
- linux文件系统dentry_Linux文件系统(四)---三大缓冲区之inode缓冲区 (内存inode映像 )...
- GPG96244QS1屏驱动难题
- CMakeLists.txt使用boost库
- 配置python程序debug/run,避免每次运行都会重复加载数据集或模型,节约大量等待时间
- java 随机生成大写字母_java 生成随机大写字母,整数,小写字母
- java 当前时间 long_java 获取当前的日期、时间, 日期、字符串、long之间的相互转换...
- OBV指标的活用以及OBV指标的解析
- java下载https的网络图片,添加安全证书方式
- ArcGIS桌面构建三维地质体模型
- 图形形状及颜色识别【Python大作业】
- vue图形验证码组件
- scala当中的文件操作、网络请求和隐式转换
- 不知道买啥绘本?适合3-6岁儿童的绘本书单,建议父母收藏
- 基础篇:String字符串之截取、分割、替换