CF-797-E-根号分治
1.CF-55-D-数位DP2.CF-87-D-并查集3.CF-91-B-单调栈+二分4.CF-240-F-线段树5.CF-242-E-线段树6.CF-292-D-并查集7.CF-282-E-Trie8.CF-342-E-分块9.CF-375-D-启发式合并10.CF-431-D-二分+数位DP11.CF-461-B-树形DP12.CF-514-D-单调队列13.CF-522-D-线段树14.CF-570-D-启发式合并15.CF-600-E-启发式合并16.CF-613-D-虚树17.CF-620-E-DFS序+线段树18.CF-675-E-RMQ优化DP19.CF-702-E-倍增
20.CF-797-E-根号分治
21.CF-817-E-Trie22.CF-877-E-dfs序+线段树23.CF-915-F-并查集24.CF-938-D-最短路25.CF-1051-F-最短路+最小生成树26.CF-1184-E3-最小生成树+倍增+并查集27.CF-1304-E-倍增LCA+思维28.CF-1399-E2-优先队列29.CF-1515-F-思维30.CF-1831-E-卡特兰数+异或哈希+差分31.CF-1921-F-根号分治797-E 题目大意
给定一个长为
- 给定
,你需要反复执行操作 ,直到 为止,问你要执行多少次操作。
Solution
考虑两种思路:
1、暴力回答询问,每次反复模拟操作,直到
2、预处理出所有的
两个算法单独使用任何一个复杂度都过高,因此考虑结合使用,预处理出所有
- 如果
,则直接用预处理的值回答询问。 - 如果
,则暴力模拟。
时间复杂度:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
const int M=350;
int pre[N][M];
int a[N];
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n;
cin>>n;
int B=sqrt(n);
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=n;i;i--){
for(int j=1;j<=B;j++){
if(i+a[i]+j>n) pre[i][j]=1;
else pre[i][j]=pre[i+a[i]+j][j]+1;
}
}
int q;
cin>>q;
while(q--){
int p,k;
cin>>p>>k;
if(k<=B){
cout<<pre[p][k]<<'\n';
}else{
int res=0;
while(p<=n){
res++;
p+=a[p]+k;
}
cout<<res<<'\n';
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现