首页 > 其他分享 >12.16信息学笔记——ST表

12.16信息学笔记——ST表

时间:2023-12-26 19:33:42浏览次数:33  
标签:信息学 int 最大值 ST 12.16 区间 查询 2j

TIP:最近想先整一整数据结构,之后再整算法。

来搞ST表,它是基于倍增思想的。

首先知道它维护的是可重复贡献的区间问题

考虑一些可以维护的问题: 区间最大值、区间最小值、区间GCD、区间按位或……

我们用区间最大值来讲解。

考虑定义f(i,j)代表区间[i,i+2j-1]的最大值。

显然有f(i,0)=ai

考虑转移,由于是倍增思想,所以分成两个长度相同的小区间转移:f(i,j)=max(f(i,j-1),f(i+2j-1,j-1))也就是说是区间[i,i+2j-1-1]与[i+2j-1,i+2j-1+2j-1-1]的最大值。

预处理完所有的状态之后,我们考虑查询。

设查询的区间为[L,R],只需要查询f(l,l+2k-1)与f(r-2k+1,r)的最大值即可,此处为了包含整个区间,我们取k=log2(r-l+1)即可。 

代码(查询区间最大值):

#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e5+10;
const int M=20;
int n,m,a[N],lg[N],st[N][M],l,r;
void ipt1(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
}
void ipt2(){
    scanf("%d%d",&l,&r);
}
void init(){
    for(int i=2;i<=n;i++) lg[i]=lg[i/2]+1;
    for(int i=1;i<=n;i++) st[i][0]=a[i];
}
void build(){
    for(int i=1;i<M;i++)
        for(int j=1;j+(1<<i)-1<=n;j++)
            st[j][i]=max(st[j][i-1],st[j+(1<<(i-1))][i-1]);
}
int query(int l,int r){
    int t=lg[r-l+1];
    return max(st[l][t],st[r-(1<<t)+1][t]);
}
int main(){
    ipt1();
    init();
    build();
    while(m--){
        ipt2();
        printf("%d\n",query(l,r));
    }
    return 0;
}

 

标签:信息学,int,最大值,ST,12.16,区间,查询,2j
From: https://www.cnblogs.com/czy-lemon/p/17929145.html

相关文章

  • Stable Diffusion(SD-Webui)tag快速提权(降权)
    StableDiffusion(SD-Webui)tag的快速提权|降权:很简单:  1.选中tag(只要光标在你分词里面就行)  2.CRTRL+上下方向键(向上默认提0.1,向下默认减.0.1,当权为1时候会帮你自动消掉括号)完事请注意:中文逗号默认会被视为tag一部分!判断中英文逗号最简单的办法是看有没有贴贴,俩遍都......
  • Spring Boot学习随笔- RestFul API(@RestController、@RequestBody、@PathVariable),使用
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十六章、RestFulAPI什么是RESTREST全称是ResourceRepresentationalStateTransfer,中文意思是表述性状态转移,它首次出现在2000年RoyFielding的博士论文中,RoyFielding是HTTP规范的主要编写者之一。他在论文中表......
  • CodeForces 1917E Construct Matrix
    洛谷传送门CF传送门\(2\nmidk\)显然无解。若\(4\midk\),发现给一个全\(2\times2\)子矩形全部异或\(1\)不会对行异或和和列异或和造成影响。那么我们找到\(\frac{k}{4}\)个全\(0\)的\(2\times2\)子矩形填\(1\)即可。否则若\(k=2\)或\(k=n^2-2\)......
  • elasticsearch安装
    #!/bin/bash###############################################################FileName:install_redis.sh#Version:V1.0#Author:junwang#Organization:#CreatedTime:2021-04-1517:12:54#Description:###############################################......
  • Postman!IDEA中也能用!
    Postman是大家最常用的API调试工具,那么有没有一种方法可以不用手动写入接口到Postman,即可进行接口调试操作?今天给大家推荐一款IDEA插件:ApipostHelper,写完代码就可以调试接口并一键生成接口文档!而且还可以根据已有的方法帮助您快速生成url和params。更重要的是他完全免费!Apipos......
  • constructor中的super
    1.ES6要求,子类的构造函数必须执行一次super函数。这是必须的,否则JavaScript引擎会报错。在执行super函数时,其实就是在创建子类的this,然后将父类的实例和方法放置在这个this对象中,子类在调用super之前是没有this的,所有的this操作都要在super()关键字后执行。由于super指向父类的......
  • DataStream(二)
    DataStream(二)目录 5.3.2聚合算子(Aggregation)5.3.3用户自定义函数(UDF)3.扁平映射(flatMap)flatMap操作又称为扁平映射,主要是将数据流中的整体(一般是集合类型)拆分成一个一个的个体使用。消费一个元素,可以产生0到多个元素。flatMap可以认为是“扁平化”(flatten)和“映......
  • SSM 框架中 Form表单提交 通过request.getParameter("属性名") 获取的结果为null
    今日换机器引入项目源码之后,项目中表单提交到后台,获取不到参数值前台代码大致如下<formaction="/login"method="post"name="loginForm"id="loginForm"><divstyle="width:382px;height:376px;padding:27px0px;margin:0px84px......
  • CodeForces 1917F Construct Tree
    洛谷传送门CF传送门考虑形式化地描述这个问题。先把\(l\)排序。然后相当于是否存在一个\(\{1,2,\ldots,n\}\)的子集\(S\),使得:\(\sum\limits_{i\inS}l_i=d\)。\(\existsT\subseteqS,\max\limits_{i\notinS}l_i\le\min(\sum\limits_{i\inT}l_i,\sum......
  • Argo Rollouts TrafficRouting结合Istio进行Canary流量管理基础
    ArgoRolloutsTrafficRouting概述流量治理技术实现如下:1.按百分比进行流量管理(即5%的流量应流向新版本,其余流量流向稳定版本)2.基于标头的路由(即将带有特定标头的请求发送到新版本)3.镜像流量,其中所有流量都被复制并并行发送到新版本(但响应被忽略)TrafficRouting配置apiVersi......