RMQ問題

RMQ (Range Minimum/Maximum Query)問題是指:對于長度為n的數(shù)列A弥姻,回答若干詢問RMQ(A,i,j)(i,j<=n)缅疟,返回數(shù)列A中下標(biāo)在[i,j]里的最小(大)值梗顺,也就是說宵荒,RMQ問題是指求區(qū)間最值的問題 采郎。

解決這類問題常用的是tarjan的Sparse_table算法,即稀疏表算法懂昂。
它的預(yù)處理時間是O( nlogn ),但是查詢時間為O( 1 )
Balanced Lineup

#include <cstdio>
#include<algorithm>
#include <stdlib.h>
#include<string.h>
#define maxn 50005
using namespace std;
int dmin[maxn][16],dmax[maxn][16];
int rmq_min(int l,int r)
{
    int k=0;
    while((1<<(k+1))<=r-l+1) k++;//如果2^(k+1)<=r - l + 1,那么k還可以加1
    //可以保證2^k最大等于區(qū)間長度,那么范圍查詢不越界,且左右半邊至少無空隙
    return min(dmin[l][k],dmin[r-(1<<k)+1][k]);
}
int rmq_max(int l,int r)
{
    int k=0;
    while((1<<(k+1))<=r-l+1) k++;
    return max(dmax[l][k],dmax[r-(1<<k)+1][k]);
}
int main()
{
    int n,m,a,b;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a);
        dmin[i][0]=a;
        dmax[i][0]=a;
    }
    for(int j=1;(1<<j)<=n;j++)
    {
        for(int i=0;i+(1<<j)-1<n;i++)
        {
            dmin[i][j]=min(dmin[i][j-1],dmin[i+(1<<(j-1))][j-1]);
            dmax[i][j]=max(dmax[i][j-1],dmax[i+(1<<(j-1))][j-1]);
        }
    }
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&a,&b);
        printf("%d\n",rmq_max(a-1,b-1)-rmq_min(a-1,b-1));
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末介时,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凌彬,更是在濱河造成了極大的恐慌沸柔,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铲敛,死亡現(xiàn)場離奇詭異褐澎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)伐蒋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門工三,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人先鱼,你說我怎么就攤上這事俭正。” “怎么了焙畔?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵掸读,是天一觀的道長。 經(jīng)常有香客問我,道長寺枉,這世上最難降的妖魔是什么抑淫? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮姥闪,結(jié)果婚禮上始苇,老公的妹妹穿的比我還像新娘。我一直安慰自己筐喳,他們只是感情好催式,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著避归,像睡著了一般荣月。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梳毙,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天哺窄,我揣著相機(jī)與錄音,去河邊找鬼账锹。 笑死萌业,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奸柬。 我是一名探鬼主播生年,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼廓奕!你這毒婦竟也來了抱婉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤桌粉,失蹤者是張志新(化名)和其女友劉穎蒸绩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铃肯,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侵贵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缘薛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡卡睦,死狀恐怖宴胧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情表锻,我是刑警寧澤恕齐,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瞬逊,受9級特大地震影響显歧,放射性物質(zhì)發(fā)生泄漏仪或。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一士骤、第九天 我趴在偏房一處隱蔽的房頂上張望范删。 院中可真熱鬧,春花似錦拷肌、人聲如沸到旦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽添忘。三九已至,卻和暖如春若锁,著一層夾襖步出監(jiān)牢的瞬間搁骑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工又固, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仲器,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓口予,卻偏偏與公主長得像娄周,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沪停,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)煤辨。 張土汪:刷leetcod...
    土汪閱讀 12,747評論 0 33
  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子木张,小兔子...
    趙宇_阿特奇閱讀 1,869評論 0 2
  • 小羚閱讀 112評論 0 4
  • 我們只是萬千世界飄零的一片众辨, 因?yàn)轱L(fēng)的抬愛,我們相遇舷礼, 沙兒見證了我們的相識鹃彻。 風(fēng)停了,我們散了妻献, 飄零了很久蛛株,路...
    如冰1閱讀 253評論 0 1
  • 高中生活已經(jīng)開始一個月了,今天是我十五歲生日育拨。我的爸媽一直都在外地為生活而奔波谨履,小的時候總是一直跟隨著父母在外...
    傻不傻啊閱讀 730評論 0 0