青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

為生存而奔跑

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

留言簿(5)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 330537
  • 排名 - 74

最新評論

閱讀排行榜

評論排行榜

    RMQ(Range Minimum/Maximum Query)問題是求區間最值問題。可以寫一個線段樹,但是預處理和查詢的復雜度都是O(logn)。這里有更牛的算法,就是ST算法,它可以做到O(nlogn)的預處理,O(1)!!!地回答每個詢問。
    來看一下ST算法是怎么實現的(以最大值為例):
      
    首先是預處理,用一個DP解決。設a[i]是要求區間最值的數列,f[i,j]表示從第i個數起連續2^j個數中的最大值。例如數列3 2 4 5 6 8 1 2 9 7 ,f[1,0]表示第1個數起,長度為2^0=1的最大值,其實就是3這個數。f[1,2]=5,f[1,3]=8,f[2,0]=2,f[2,1]=4……從這里可以看出f[i,0]其實就等于a[i]。這樣,Dp的狀態、初值都已經有了,剩下的就是狀態轉移方程。我們把f[i,j]平均分成兩段(因為f[i,j]一定是偶數個數字),從i到i+2^(j-1)-1為一段,i+2^(j-1)到i+2^j-1為一段(長度都為2^(j-1))。用上例說明,當i=1,j=3時就是3,2,4,5 和 6,8,1,2這兩段。f[i,j]就是這兩段的最大值中的最大值。于是我們得到了動規方程F[i,j]=max(F[i,j-1],F[i+2^(j-i),j-1]).
    
    接下來是得出最值,也許你想不到計算出f[i,j]有什么用處,一般毛想想計算max還是要O(logn),甚至O(n)。但有一個很好的辦法,做到了O(1)。還是分開來。如在上例中我們要求區間[2,8]的最大值,就要把它分成[2,5]和[5,8]兩個區間,因為這兩個區間的最大值我們可以直接由f[2,2]和f[5,2]得到。擴展到一般情況,就是把區間[l,r]分成兩個長度為2^n的區間(保證有f[i,j]對應)。直接給出表達式:

 f[i,j] 表示 從第 i 個數數 2^j 中最小的數
那么:
        最大值 f[i,j]=max(f[i,j-1],f[i+2^(j-1),j-1]);
        最小值 f[i,j]=min(f[i,j-1],f[i+2^(j-1),j-1]);


模板:
#include <iostream>
#include 
<math.h>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
 
using namespace std;
 
const int maxn=50001;
 
int h[maxn];
 
int mx[maxn][16],mn[maxn][16];
int n,q;
 
 
void rmq_init()
 
{
     
int i,j;
     
for(j=1;j<=n;j++) mx[j][0]=mn[j][0]=h[j];
     
int m=floor(log((double)n)/log(2.0));
     
for(i=1;i<=m;i++){
         
for(j=n;j>0;j--){
             mx[j][i]
=mx[j][i-1];
             
if(j+(1<<(i-1))<=n) mx[j][i]=max(mx[j][i],mx[j+(1<<(i-1))][i-1]);
         }

    }

    
for(i=1;i<=m;i++){
         
for(j=n;j>0;j--){
            mn[j][i]
=mn[j][i-1];
             
if(j+(1<<(i-1))<=n) mn[j][i]=min(mn[j][i],mn[j+(1<<(i-1))][i-1]);
         }

     }

 }

 
 
int rmq(int l,int r)
 
{
     
int m=floor(log((double)(r-l+1))/log(2.0));
    
int a=max(mx[l][m],mx[r-(1<<m)+1][m]);
     
int b=min(mn[l][m],mn[r-(1<<m)+1][m]);
    
return a-b;   
 }

 
 
int main()
 
{
     
int i,l,r;
     scanf(
"%d%d",&n,&q);
     
for(i=1;i<=n;i++) scanf("%d",&h[i]);
     rmq_init();
     
for(i=0;i<q;i++){
         scanf(
"%d%d",&l,&r);
         printf(
"%d\n",rmq(l,r));
     }


 }


posted on 2009-08-06 09:59 baby-fly 閱讀(1622) 評論(2)  編輯 收藏 引用 所屬分類: Algorithm

Feedback

# re: ST算法求解RMQ問題 2010-05-01 11:24 Perhack
寫的很好。。。  回復  更多評論
  

# re: ST算法求解RMQ問題 2010-08-09 09:10 koma
大牛 , 貌似這個版本沒線段樹快喲  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美成人一区二区三区| 欧美日本高清| 在线亚洲伦理| 国产免费一区二区三区香蕉精| 欧美亚洲一区三区| 在线看国产日韩| 狠狠久久婷婷| 欧美亚男人的天堂| 欧美+亚洲+精品+三区| 欧美中文字幕视频在线观看| 欧美激情 亚洲a∨综合| 一区二区三区国产| 在线视频欧美日韩| 在线精品一区二区| 在线观看日韩专区| 99综合电影在线视频| 亚洲午夜羞羞片| 性欧美暴力猛交69hd| 久久亚洲国产精品一区二区| 美女主播精品视频一二三四| 亚洲国产精彩中文乱码av在线播放| 欧美在线观看网站| 欧美日韩成人一区| 久久婷婷av| 精品动漫3d一区二区三区| 欧美一区二区三区视频在线观看 | 亚洲第一天堂av| 亚洲欧美网站| 久久免费视频网| 亚洲精品1区| 亚洲精品免费在线播放| 久久激情综合网| 性久久久久久| 欧美精品免费观看二区| 久久亚洲精品一区二区| 国产精品视频久久久| 亚洲专区欧美专区| 亚洲一区在线免费| 国产一区二区三区av电影| 久久婷婷蜜乳一本欲蜜臀| 美日韩在线观看| 亚洲区免费影片| 欧美视频在线观看免费网址| 亚洲欧美在线看| 国精品一区二区三区| 免费观看成人www动漫视频| 欧美激情国产精品| 亚洲一区bb| 国外视频精品毛片| 欧美777四色影视在线| 亚洲国产精品专区久久 | 亚洲欧美日韩一区二区在线 | 亚洲国产精品成人综合色在线婷婷| 欧美电影在线播放| 亚洲一二三区精品| 麻豆成人综合网| 一本一道久久综合狠狠老精东影业 | 欧美日产一区二区三区在线观看| 一本色道久久综合亚洲精品婷婷| 久久久久久97三级| 日韩亚洲欧美一区| 国产精品人成在线观看免费| 蜜月aⅴ免费一区二区三区| 亚洲人成在线观看| 久久综合综合久久综合| 亚洲一区精彩视频| 亚洲伦伦在线| 在线观看亚洲视频| 国产精品老女人精品视频| 欧美影视一区| 亚洲国产成人精品女人久久久 | 欧美中文字幕在线| 亚洲大胆视频| 国产精品推荐精品| 欧美精品一区二区视频| 午夜精品区一区二区三| 欧美 日韩 国产 一区| 久久不射网站| 午夜精品www| 亚洲一级免费视频| 亚洲国产婷婷香蕉久久久久久99| 国产精品一区二区女厕厕| 欧美电影免费观看网站| 久久综合国产精品| 亚洲图片欧美午夜| 欧美福利视频在线| 一道本一区二区| 亚洲区欧美区| 亚洲激情欧美激情| 狠狠88综合久久久久综合网| 国产精品亚洲综合久久| 欧美日韩中文在线| 欧美精品免费看| 欧美母乳在线| 欧美日产在线观看| 欧美日韩国产限制| 欧美精品久久久久久久久老牛影院| 久久亚洲春色中文字幕久久久| 制服丝袜亚洲播放| 一区二区三区国产在线观看| 欧美成人免费小视频| 亚洲一区二区三区免费视频| 国产在线播放一区二区三区| 国产毛片一区| 国产精品亚洲а∨天堂免在线| 国产精品成人播放| 亚洲欧美日韩成人| 亚洲午夜精品| 一区二区三区欧美成人| 一区二区日韩免费看| 一区二区免费在线播放| 亚洲午夜精品久久久久久浪潮| 夜夜嗨av色一区二区不卡| 亚洲作爱视频| 午夜精品短视频| 久久国产天堂福利天堂| 久久综合色综合88| 欧美va天堂在线| 欧美日韩在线观看视频| 欧美午夜片在线观看| 国产农村妇女精品一二区| 国产深夜精品| 亚洲第一页自拍| 一本色道久久综合狠狠躁篇怎么玩 | 日韩一级成人av| 99视频超级精品| 亚洲一区二区成人| 欧美一区午夜精品| 免费成人在线视频网站| 亚洲人成在线播放网站岛国| 亚洲欧美日韩国产综合精品二区| 久久都是精品| 欧美肥婆在线| 国产精品久久久久天堂| 精品动漫一区二区| 一本久道久久综合狠狠爱| 欧美在线在线| 91久久国产自产拍夜夜嗨 | 久久综合网hezyo| 亚洲激情视频在线播放| 亚洲一区二区三区三| 久久在线免费观看| 国产精品久久久久久影院8一贰佰| 精品1区2区| 99精品国产在热久久| 久久精品30| 日韩视频免费在线| 欧美一级成年大片在线观看| 欧美成人一品| 国产一区二区久久久| 中文av一区特黄| 美女国内精品自产拍在线播放| 99精品视频免费观看视频| 久久久久久久一区二区| 国产精品久久波多野结衣| 亚洲国产精品第一区二区| 欧美一区二区三区久久精品茉莉花| 欧美好骚综合网| 欧美中文在线观看国产| 欧美激情在线观看| 红桃视频一区| 欧美伊人久久| 亚洲麻豆av| 久久综合五月天婷婷伊人| 国产免费观看久久黄| 亚洲午夜在线| 91久久黄色| 欧美刺激性大交免费视频| 韩国成人理伦片免费播放| 午夜欧美大尺度福利影院在线看 | 在线视频精品| 欧美国产日韩一区二区三区| 欧美一级久久久| 国产精品高潮粉嫩av| 亚洲精品久久视频| 麻豆精品在线视频| 香蕉国产精品偷在线观看不卡| 欧美日韩福利| 影音先锋日韩有码| 久久激情五月激情| 亚洲天堂网站在线观看视频| 久热精品视频在线观看一区| 国产亚洲亚洲| 欧美在线在线| 午夜一区二区三区在线观看| 国产精品入口日韩视频大尺度| 亚洲午夜女主播在线直播| 亚洲久久一区二区| 99视频精品| 欧美精品一区二区在线观看| 亚洲欧洲美洲综合色网| 免费久久99精品国产自在现线| 欧美伊人精品成人久久综合97| 国产日韩欧美一区二区三区在线观看 | 亚洲成人中文| 免费视频亚洲| 亚洲精品久久久蜜桃| 91久久久一线二线三线品牌| 欧美va亚洲va日韩∨a综合色| 伊人久久av导航|