luogu P3203 [HNOI2010]弹飞绵羊(LCT ? 暴力分块 ! )
整理的算法模板合集: ACM模板
已知:暴力 + 暴力 + 10510^5105 = 分块
设 need[i]
表示从 i
开始,跳出所在块的步数;ver[i]
表示跳出当前所在的块后到了哪里;
罗老师的题解
//#pragma GCC optimize("Ofast")
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<bitset>
#include<map>#define debug(x) cout << x << "ok" << endl
typedef long long ll;
#define file freopen("1.in", "r", stdin);freopen("1.out", "w", stdout);
const int N = 2e5 + 7, M = 1e5 + 7, INF = 0x3f3f3f3f;
const int B = 260, B2 = 300;using namespace std;ll read()
{ll x = 0, f = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-')f = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f;
}ll n, m;
ll val[N];
ll block;
ll need[N], ver[N];
ll bi[N];
ll st[N];//每个块开始的编号
ll ed[N];//每个块结束的编号inline void modify(int p, int w)
{val[p] = w;for(register int i = st[bi[p] + 1] - 1; i >= st[bi[p]]; -- i){if(i + val[i] >= st[bi[p] + 1]){need[i] = 1;ver[i] = i + val[i];}else {need[i] = need[i + val[i]] + 1;ver[i] = ver[i + val[i]];}}
}inline ll query(int p)
{int res = 0;while(p <= n){//主要是这点,可以直接出去res += need[p];p = ver[p];}return res;
}int main()
{n = read();block = sqrt(n);for(int i = 1; i <= n; ++ i){val[i] = read();bi[i] = (i - 1) / block + 1;//if(bi[i] != bi[i - 1])//说明一个新的块开始了// st[bi[i]] = i;}//st[bi[n] + 1] = n + 1;//一个虚拟节点表示已经被弹飞了for(int i = 1; i <= block; ++ i){st[i] = (i - 1) * block + 1;ed[i] = i * block;}if(ed[block] < n){block ++ ;//一个角块st[block] = ed[block - 1] + 1;ed[block] = n;}for(int i = n; i >= 1; -- i){if(i + val[i] >= st[bi[i] + 1]){need[i] = 1;//可以一步出去ver[i] = i + val[i];}else {need[i] = need[i + val[i]] + 1;//所以我们是倒着推的ver[i] = ver[i + val[i]];//递推}}m = read();while(m -- ){int op = read(), x = read(), y;x ++ ;//题目里的编号是0 ~ n - 1,所以需要 ++if(op == 1){printf("%lld\n", query(x));}else {y = read();modify(x, y);}}return 0;
}
luogu P3203 [HNOI2010]弹飞绵羊(LCT ? 暴力分块 ! )相关推荐
- P3203 [HNOI2010]弹飞绵羊
P3203 [HNOI2010]弹飞绵羊 题目描述 详见:P3203 [HNOI2010]弹飞绵羊 solution 这是一道LCT的裸题. 但是我并不想用LCT解决此题(In fact 是不会LCT ...
- HNOI2010——弹飞绵羊(lct)
某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当 ...
- [HNOI2010]弹飞绵羊
题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...
- BZOJ 2002 HNOI2010 弹飞绵羊 分块
题目大意及LCT版本题解:见 http://blog.csdn.net/popoqqq/article/details/38849471 今天手滑用分块又重写了一遍这道题0.0 分块就是短啊 将弹簧分 ...
- BZOJ2002 [HNOI2010] 弹飞绵羊
LCT access完了一定splay再用!!! 悲伤= = LCT裸题 把调出去设虚点n+1即可 //Love and Freedom. #include<cstdio> #includ ...
- BZOJ P2002 [HNOI2010] 弹飞绵羊【分块】
这道题就很优秀了.考试的时候完全没想到正解,最后写了一个暴力20分- 直接讲分块吧.我们预处理两个数组 S t e p [ ] , G e t [ ] Step[],Get[] Step[],Get[ ...
- AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
[HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- 2002: [Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 https://www.lydsy.com/JudgeOnline/problem.php?id=2002 分析: 绵羊在弹飞的路径中相当于一棵 ...
- bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 10761 Solved: 5542 [Su ...
最新文章
- ​GPLinker:基于GlobalPointer的实体关系联合抽取
- paramiko 使用总结(SSH 操作远端机器)
- 未来是属于 ARM 为代表的精简指令集还是 x86 为代表的复杂指令集?
- 获取map第一个的key和value_Hadoop学习之路(3)Map-Shuffle-Reduce详解与源码
- Infographic Modern Graphs Mac(现代信息图表动画fcpx插件)
- 耗费360万美元开发“无坚不摧”的电脑,美国这回下血本了!
- 计算机如何断开局域网,win7如何禁止局域网用户访问电脑
- 好看的php验证码,一个漂亮的PHP验证码_PHP教程
- vofuria的开发(1)
- JAVA 身份证号码的验证
- 富士智能e7说明书_富士智能停车系统配置
- 先验概率与后验概率的区别(老迷惑了)
- 效果图色彩与色彩搭配原理
- Xcode8 10大新特性
- 数独-比回溯法更优的人类思维逻辑的数独解法
- 手机怎样识别图片中的文字?
- 向前的快捷键_这些属于胜院的快捷键你知道吗?
- 燕千云知识库,解决你的知识沉淀烦恼
- 堆区(Heap)详细介绍
- 学习-Java类和对象之构造方法与对象创建之求椭圆面积