洛谷 P3203 [HNOI2010]弹飞绵羊 分块
我们只需将序列分成 n\sqrt{n}n 块,对于每一个点维护一个 val[i]val[i]val[i],to[i]to[i]to[i],分别代表该点跳到下一个块所需要的代价以及会跳到的节点编号。在查询时,我们最多会跳 n\sqrt{n}n 块,修改的时候将节点所在区间暴力修改即可。
Code:
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 2000000 + 3;
int arr[maxn], n, block, to[maxn], val[maxn], m, belong[maxn];
struct Data_Structure{inline void init(){block = sqrt(n);for(int i = n;i >= 1; --i) {belong[i] = (i - 1) / block + 1;to[i] = belong[i + arr[i]] == belong[i] ? to[i + arr[i]] : i + arr[i];val[i] = belong[i + arr[i]] == belong[i] ? val[i + arr[i]] + 1 : 1;}}inline int solve(){int pos, ans = 0;scanf("%d",&pos);++pos;while(pos <= n){ans += val[pos];pos = to[pos];}return ans;}inline void update(){int pos, data;scanf("%d%d",&pos,&data);++pos;arr[pos] = data;for(int i = min(belong[pos] * block, n); i >= (belong[pos] - 1) * block + 1; --i){to[i] = belong[i + arr[i]] == belong[i] ? to[i + arr[i]] : i + arr[i];val[i] = belong[i + arr[i]] == belong[i] ? val[i + arr[i]] + 1 : 1;}}
}T;
int main(){scanf("%d",&n);for(int i = 1;i <= n; ++i) scanf("%d",&arr[i]);T.init();scanf("%d",&m);while(m--){int opt;scanf("%d",&opt);switch(opt){case 1:{printf("%d\n", T.solve());break;}case 2:{T.update();break;}}}return 0;
}
转载于:https://www.cnblogs.com/guangheli/p/9845089.html
洛谷 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,当 ...
- 分块-洛谷P3203 [HNOI2010]BOUNCE 弹飞绵羊
https://www.luogu.org/problem/show?pid=3203#sub 这道题第一次TLEl,然后改了改变成AC: 所以说这种题目,时限卡得很紧,一定要思考理论复杂度和常数的问 ...
- BZOJ P2002 [HNOI2010] 弹飞绵羊【分块】
这道题就很优秀了.考试的时候完全没想到正解,最后写了一个暴力20分- 直接讲分块吧.我们预处理两个数组 S t e p [ ] , G e t [ ] Step[],Get[] Step[],Get[ ...
最新文章
- 某程序员毕业进UC,被阿里收购!跳去优酷土豆,又被阿里收购!再跳去饿了么,还被阿里收购!难道阿里想收购的是他?...
- MVC 源码系列之路由(一)
- 浅析影响网站建设的因素有哪些?
- A*寻径算法新手入门(转载)
- java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解
- java高级断言_Java之断言
- 王佩丰第2讲-excel单元格格式设置 笔记
- 【SpringBoot + Docker】编写Dockerfile安装jdk11.0.3,并部署SpringBoot项目
- 运动会成绩管理系统python_Python 实现简易版成绩管理系统
- 内核中引发bug并打印信息
- mysql key_len_浅谈mysql explain中key_len的计算方法
- Python 小白从零开始 PyQt5 项目实战(3)信号与槽的连接
- 吃糖果(信息学奥赛一本通-T1193)
- rabbitmq 消费端代码获取队列名称_RabbitMQ四:生产者--队列--消费者
- usage java,dnsjava usage
- 使用JavaScript将小写金额转化为大写金额的两种常见方法
- 随机效应估算与固定效应估算_混合OLS模型、固定效应模型、随机效应模型的区别是什么...
- python-opencv-使图片更清晰的几种方法
- 开启Win7快速启动栏
- python turtle 绘制北京天安门
热门文章
- golang 读取Excel 或者map字符型返回结构体数组
- elasticsearch6.x.x logstash6.x.x kibana6.x.x Filebeat6.x 配置及安装 CentOS7.3或更高
- nginx apache tomcat 相关收藏
- Nginx 解决请求跨域 与 配置 gzip 压缩
- java镜像_012 制作Java基础镜像
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_17-异常处理-可预知异常处理-异常处理测试...
- tomcat优化实例
- nexus配置第三方库文件
- selenium RC优化代码3
- 关于鼓励软件产业和集成电路产业发展有关税收政策问题的通知