RMQ,两个点MLE,求滚动数组优化(st表)

P1440 求m区间内的最小值

一个简单名字 @ 2021-09-11 16:20:03

听说滚动数组优化可以过,请大佬指教(现80分两个点MLE)
/*
记得检查代码
写完记得对拍
模数不要取错
多造数据卡自己(雾
能得的分不要让他跑掉啦!
*/
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=2000001;
int f[maxn][20],lg[maxn];
int n,m;
int l=1;
int r=m+1;
void produce_log()
{
    for(int i=2;i<=n;i++)
        lg[i]=lg[i>>1]+1;
}
void RMQ()
{
for(int j=1;j<=lg[n];j++)
for(int i=1;i<=n-(1<<j)+1;i++)
f[i][j]=min(f[i][j-1],f[i+(1<<j-1)][j-1]);
}
int query(int i)
{
int cha;
if(i-1<=m)
{
cha=lg[i-1];
return min(f[1][cha],f[i-(1<<cha)][cha]);
}
   l++,r++;
  cha=lg[r-l];
return min(f[l][cha],f[r-(1<<cha)][cha]);
}
int main()
{
    lg[1]=0;
    scanf("%d%d",&n,&m);
        r=m+1;
    for(int i=1;i<=n;i++)
      scanf("%d",&f[i][0]);
        produce_log();
    RMQ();
    printf("0\n");
    for(int i=2;i<=n;i++)
      printf("%d\n",query(i));
    return 0;
}

by 一个简单名字 @ 2021-09-21 09:05:06

一个回复的都没有?


by Likejie_Hooray @ 2021-10-26 18:04:58

en


by Z_301 @ 2021-12-11 20:42:55

@一个简单名字 可以去看我的这个提交

如果你有兴趣也可以去看一看我卡空间的艰难历程


|