寄寄寄寄寄寄寄寄寄寄寄寄寄寄寄寄寄|

TLE_Automation

园龄:2年9个月粉丝:19关注:23

CF797E Array Queries 题解

题意:

给定一个序列 a,给定 Tp,k,每次操作为 p=p+ap+k,问需要操作几次才能使得 p>n

思路:

我们考虑根号分治。

模拟的时间复杂度为 O(nk),如果全部数据按照模拟会超时。

我们设 dpi,jp=i,k=j 时的答案,空间复杂度为 O(nk),会炸。

我们考虑将两种做法结合起来。

如果 k=n 的时候,操作次数为 n。当 k>n 的时候,答案必定会小于 n。 对于这部分我们直接模拟即可。

对于 k<n 的这部分答案来说,我们可以用第二种办法提前预处理出来,询问时直接输出即可。

Ac code:

int dp[maxn >> 1][350], num, a[N];
signed main() {
int tests = 1; //tests = read();
while(tests--) {
int n = read(); num = sqrt(n);
for(int i = 1; i <= n; i++) a[i] = read();
int T = read();
for(int i = n; i >= 1; i--) {
for(int j = 1; j <= num; j++) {
if(a[i] + i + j > n) dp[i][j] = 1;
else dp[i][j] = dp[i + a[i] + j][j] + 1;
}
}
while(T--) {
int p = read(), k = read();
if(k <= num) printf("%d\n", dp[p][k]);
else {
int js = 0;
while(p <= n) {
js++, p = p + a[p] + k;
} printf("%d\n", js);
}
}
}
}

The End.

本文作者:TLE_Automation

本文链接:https://www.cnblogs.com/tttttttle/p/16293591.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   TLE_Automation  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起