ST表
简介
ST表是一种可进行快速的区间查询的数据结构。他的预处理复杂度为O (nlogn),查询复杂度为O(1)。
ST表能解决可重复贡献问题,即某段区间被重复计算不会影响结果。
实现
初始化
定义状态
转移时可将
以求区间最大值为例:
查询
假设要查询区间
代码
#include<bits/stdc++.h>
using namespace std;
int st[200010][20]={0},a[100010];
int n,m,l,r;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
st[i][0]=a[i];//初始化边界条件
}
for(int i=n;i>=1;i--)
{
for(int j=1;j<20;j++)
{
if((i+(1<<(j-1)))>n)continue;//如果越界就跳过
st[i][j]=st[i][j-1]>st[i+(1<<(j-1))][j-1]?st[i][j-1]:st[i+(1<<(j-1))][j-1];//状态转移
}
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&l,&r);
int k=log2(r-l+1),ans;
ans=(st[l][k]>st[r-(1<<k)+1][k])?st[l][k]:st[r-(1<<k)+1][k];//求出答案
printf("%d\n",ans);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】