zoukankan      html  css  js  c++  java
  • ST函数(ST表)RMQ O(1)查询 离线

    ST算法是基于倍增的动态规划算法。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    using namespace std;
    int map[1000005][20];
    int N,K;
    void work()
    {
        int i,j;
        for(j=1;1<<j<=N;j++)
        for(i=1;i+(1<<j)-1<=N;i++)//i+(1<<j)-1<=n是为了保证区间左端点不超出总数n
        map[i][j]=min(map[i][j-1],map[i+(1<<j-1)][j-1]);//实质是动态规划
    }
    int question(int z,int y)
    {
        int x=int (log(y-z+1)/log(2));//注意y-z要加一才为区间长度
        return min(map[z][x],map[y-(1<<x)+1][x]);//分别以左右两个端点为基础,向区间内跳1<<x的最
    //大值;
    }
    int main()
    {
    
        scanf("%d",&N);//输入数据总数
        scanf("%d",&K);//输入询问次数k
        for(int i=1;i<=N;i++)
        scanf("%d",&map[i][0]);//数据输入加初始化,即从i开始向右走2的0次方的区间中的最大值,(注//意i到i的长度为一)。
        work();//预处理
        for(int i=1;i<=K;i++)
    
        {
    
            int a,b;
                scanf("%d%d",&a,&b);
                printf("%d ",question(a,b));//输出结果
            }
        return 0;
    }
    
  • 相关阅读:
    07.15 first与first-child的区别
    7.15 css与js 选择奇偶子元素的区别
    7.15过有意思的生活
    7.14养成健身习惯
    8080端口被占用
    Vue自定义指令和认识钩子函数
    按键修饰符
    Vue 的过滤器
    列表渲染
    在Vue中使用.class样式
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798740.html
Copyright © 2011-2022 走看看