hiho刷题日记——第十六天RMQ-ST算法

原创 2015年11月19日 23:31:50

这两天有事停了两天。这道题也是调了不少时间。好累呀。真想就直接贴代码。

ST

定义ST[Len][L]表示左边界为L,长度为2^Len的区间中的最小值。则有
ST[Len][L]=min(ST[Len-1][L],ST[Len-1][L+2^(Len-1)];
然后就可以循环求出所有的ST。

答案

取小于这个区间长度的最大的2的非负整数次幂T,则答案为min(ST[Len][L],ST[Len][R+1-(1<

代码

#include<cstdio> 
#include<algorithm>
using namespace std;

const int MAX_SIZE=1000000+1;
int N; 
int ans[21][MAX_SIZE];
int Log2[MAX_SIZE];

int main()
{
    scanf("%d",&N);
    int t=1,v=-1;
    for(register int i=1;i<=N;i++)  
    {
        scanf("%d",&ans[0][i]);
        if(i>=t) {t<<=1;v++;}
        Log2[i]=v;
    }

    t=1;
    for(register int len=1;len<=Log2[N-1];len++)
    {
        for(int l=1;l+t<=N;l++)
        {
            ans[len][l]=min(ans[len-1][l],ans[len-1][l+t]);
        }
        t<<=1;
    }

    scanf("%d",&N);
    int l,r,len;
    while(N--)
    {
        scanf("%d%d",&l,&r);
        len=Log2[r+1-l];
        printf("%d\n",min(ans[len][l],ans[len][r+1-(1<<len)]));
    }

    return 0;
}

蓝桥杯OJ刷题日记——09-基础练习 特殊回文数

基础练习 特殊回文数题目 问题描述   123321是一个非常特殊的数,它从左边读和从右边读是一样的。  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。输入格式  ...
  • u014376020
  • u014376020
  • 2015-12-01 19:07:49
  • 272

hihoCoder_#1068_RMQ-ST算法

分析:用pre_calc[L, Len]表示左边界为L,长度为Len的区间中的最小值——那么对于一个询问[Li, Ri],我只要找到小于这个区间长度的最大的2的非负整数次幂——T,那么这个区间中的最小...
  • jhgkjhg_ugtdk77
  • jhgkjhg_ugtdk77
  • 2015-08-05 16:35:34
  • 1256

蓝桥杯OJ刷题日记——02-基础练习 01字串

基础练习 01字串基础练习 01字串 题目 AC代码题目 问题描述对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是: 00000 00001 00010 00011 ...
  • u014376020
  • u014376020
  • 2015-11-29 19:30:48
  • 425

Slim 框架学习,第十一天 _Router(二)

今天接着昨天的内容,继续讲RouterInterface 的内容 popGroup/** * 从数组中,删除最后一个路由 * Removes the last route grou...
  • yantao1226
  • yantao1226
  • 2017-12-13 23:03:32
  • 58

HIHO #1068 : RMQ-ST算法

题目链接 #include #include #include #include #include #include #include #include #include #include #incl...
  • u013167299
  • u013167299
  • 2016-08-09 20:22:10
  • 236

ACM刷题之HDU————相遇周期(真·打表(素数筛选))

相遇周期 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S...
  • xiaofeng187
  • xiaofeng187
  • 2016-04-07 17:40:12
  • 481

刷题算法小技巧

1.大数取余: 对于较大数快速取余:
  • chudongfang2015
  • chudongfang2015
  • 2016-08-30 16:43:49
  • 942

蓝桥杯OJ刷题日记——08-基础练习 回文数

基础练习 回文数题目 问题描述   1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。输出格式   按从小到大的顺序输出满足条件的四位十进制数。时间限制: 1.0...
  • u014376020
  • u014376020
  • 2015-12-01 19:03:07
  • 229

2018/1/18 刷题日记

下午1点,继续写地牢题。简单bfs。 Dungeon Master -UVA - 532 Description - 题目描述[NWUACM] 你被困在一个三维的空间中,现在要寻找最短路径逃生!空间由...
  • cjc7373
  • cjc7373
  • 2018-01-18 21:41:33
  • 63

LeetCode 算法刷题(7)

7. Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123...
  • wenanshi
  • wenanshi
  • 2017-03-22 13:27:00
  • 697
收藏助手
不良信息举报
您举报文章:hiho刷题日记——第十六天RMQ-ST算法
举报原因:
原因补充:

(最多只允许输入30个字)