RMQ问题
ST 表
用状态 s[i][j] 记录区间长度为 2^j 的长度的区间的最大值
所以状态转移方程就是 st[i][j] = max( st[i][j-1] , st[i+(1
注意状态转移的方向,保证区间合法性(i+2^j 不能超过数组服务器托管网大小)
写完这些后,定义好第一个,就可以从前往后进行计算
用ST表进行区间查询
ST表存储的区间是2的整数倍,所以要计算的是,如何从要求的区间,到ST表存储的区域。
要寻找一个k,如果满足以下的大小关系,
就可以取两个区间的最大值 max(st[l][k],st[r-(1
k值的具体计算是,把(r-l+1)对2求对数,并向下取整,可以用强制类型转换来实现。
求区间最大值的代码
#include
#include
#include
using namespace std;
#define ll long long
const int N = 5e5 + 5;
int n,q;
ll a[N];
ll st[N][21];
ll getMax(int l,int r)
{
//计算k,区间长度对2取对数
int k = log(r-l+1)/log(2);
return max(st[l][k],st[r-(1> n >> q;
for(int i = 1 ; i > x;
a[i] = x;
}
//构造ST表
//1.初始化
for(int i = 1 ; i > l >> r;服务器托管网
cout
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: pandas plot函数:数据可视化的快捷通道
一般来说,我们先用pandas分析数据,然后用matplotlib之类的可视化库来显示分析结果。而pandas库中有一个强大的工具–plot函数,可以使数据可视化变得简单而高效。 1. plot 函数简介 plot函数是pandas中用于数据可视化的一个重要…