⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st.cpp

📁 RMQ问题。。 不用线段树实现。 ST算法运用的是动态规划和二进制优化的思想。使得编程复杂度降低了很多很多。
💻 CPP
字号:
/*
  Date: 27/07/08 14:52
  Description: RMQ--ST算法 
*/
#include    <iostream>
#include    <cmath>
#define  max(a , b) (a > b ? a : b)
#define  min(a , b) (a < b ? a : b)
const    int     MaxN = 10000 + 1;
int      f[MaxN][33] , N , a[MaxN];
void     Input()
{
         freopen("input.txt","r",stdin);
         freopen("output.txt","w",stdout);
         scanf("%d",&N);
         int  i;
         for (i = 1 ; i <= N ; i++)
             scanf("%d" , &a[i]);          
}
void     Pre()
{
         int  i , k , j;
         for (i = 1 ; i <= N ; i++)
             f[i][0] = a[i];
         k = int (log( (double) N )/ log(2.0));
         for (j = 1 ; j <= k ; j++)
            for (i = 1 ; i <=N - (1<<(j - 1)) ; i++)
               f[i][j] = max(f[i][j-1] , f[i + (1 << (j - 1))][j-1]) ;                
}
void     RMQ()
{
         int l ,  r  , k;
         while (scanf("%d%d",&l,&r) == 2)
         {
                 k = int( log( double (r-l+1))/ log(2.0) );
                 printf("%d\n",max(f[l][k] , f[ r - (1 << k) + 1][k]));     
         }         
}
int      main()
{
         Input();
         Pre();
         RMQ();
         return  0;
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -