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

The Fourth Dimension Space

枯葉北風(fēng)寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢(mèng)令

POJ 3264 Balanced Lineup(RMQ問題,線段樹解決)

最近在看線段樹,發(fā)現(xiàn)線段樹其實(shí)是一個(gè)非常有用的數(shù)據(jù)結(jié)構(gòu),用它可以在logL的時(shí)間內(nèi)完成一條線段的插入,查詢等,由于線段樹的特殊性質(zhì),使得它在處理某些區(qū)間的問題上具有不可替代的優(yōu)越性。
POJ3264的題意是這樣的,給你一串?dāng)?shù)字,再給你一個(gè)區(qū)間[a,b],求區(qū)間[a,b]上最大數(shù)減去最小數(shù)的最大值,即經(jīng)典的RMQ問題。
方法是首先建立[1,n]的線段樹,然后向線段樹中插入所有線段,其實(shí)在這里指的就是葉子,因?yàn)槿~子可以認(rèn)為是[a,a]的線段,插入的途中,修改每一個(gè)節(jié)點(diǎn)所對(duì)應(yīng)區(qū)間的最大值和最小值(這里是先序遍歷),然后再查詢即可。查詢的時(shí)候,只有當(dāng)當(dāng)前線段完全覆蓋時(shí),才更新信息返回,否則應(yīng)該繼續(xù)往下查詢,直到覆蓋為止!
個(gè)人通過這個(gè)題對(duì)線段樹的領(lǐng)悟得到的極大的加深,線段樹將一個(gè)很大區(qū)間的插入查詢問題分解成為很多小區(qū)間的行為,再把它們進(jìn)行組合,從而得到結(jié)果。這是因?yàn)槟阍趯?duì)比你查詢區(qū)間大的區(qū)間上查詢,結(jié)果是不精確的(想想為什么?),所以,只有分解到小區(qū)間上,才能夠獲得準(zhǔn)確的答案~
代碼如下:

//This is the source code for POJ 3264
//created by abilitytao
//2009年7月23日19:11:55
//attention:This is the my first time to use the Segment Tree,congratulations!
#include<iostream>
#include
<algorithm>
#include
<cmath>
#include
<cstring>
#include
<cstdio>
#include
<cstdlib>
using namespace std;
#define MAX 10000000
//由于N即為線段樹最底層的節(jié)點(diǎn)數(shù),則線段樹最高為(ceil)log2 N+1=17層;
//則線段樹最多有2^17-1個(gè)節(jié)點(diǎn)=131071
//上述節(jié)點(diǎn)數(shù)絕對(duì)滿足要求


struct node
{
    
int left;
    
int right;
    
int min;
    
int max;
    node 
*lchild;
    node 
*rchild;
}
nodeset[MAX];//我們預(yù)先構(gòu)造出這些節(jié)點(diǎn)可以節(jié)省大量動(dòng)態(tài)建立節(jié)點(diǎn)的時(shí)間


int minnum;
int maxnum;

node 
*Newnode()//封裝一個(gè)新建節(jié)點(diǎn)的函數(shù),可以把一些“構(gòu)造函數(shù)”寫在里面
{
    
static int count=0;//靜態(tài)變量
    node *temp=&nodeset[count++];
    temp
->max=-99999999;//初始化max
    temp->min=99999999;//初始化min
    temp->lchild=NULL;
    temp
->right=NULL;
    
return temp;
}



node 
*Build(int l,int r)//建立區(qū)間l到區(qū)間r上的線段樹
{
    node 
*root=Newnode();
    root
->left=l;
    root
->right=r;
    
if(l+1<=r)
    
{
        
int mid=(l+r)>>1;
        root
->lchild=Build(l,mid);
        root
->rchild=Build(mid+1,r);
    }

    
return root;
}



void Insert(node *root,int i,int num)//插入節(jié)點(diǎn),實(shí)際上是同步更新線段上的最大最小值
{
    
if(root->left==i&&root->right==i)
    
{
        
        root
->max=num;
        root
->min=num;
        
return ;
    }

    
if(root->min>num)
        root
->min=num;
    
if(root->max<num)
        root
->max=num;
    
    
if(root->lchild->left<=i&&root->lchild->right>=i)
        Insert(root
->lchild,i,num);
    
else if(root->rchild->left<=i&&root->rchild->right>=i)
        Insert(root
->rchild,i,num);
}




void Query(node *root,int l,int r)//查詢函數(shù)
{
    
    
if(root->min>minnum&&root->max<maxnum)
        
return;//這兩句實(shí)際上是剪枝,入過當(dāng)前線段上的最小值比我已經(jīng)查詢到的最小值還大,可以不必再往下查詢(反之亦然) ^_^

    
if(root->left==l&&root->right==r)
    
{
        
if(root->min<minnum)
            minnum
=root->min;
        
if(root->max>maxnum)
            maxnum
=root->max;
        
return ;
    }
//只有當(dāng)線段被完全覆蓋時(shí),才查詢線段中的信息
    if(root->lchild->left<=l&&root->lchild->right>=r)
        Query(root
->lchild,l,r);//若可以查詢左兒子,查詢之
    else if(root->rchild->left<=l&&root->rchild->right>=r)
        Query(root
->rchild,l,r);//若可以查詢有兒子,查詢之
    else
    
{

        
int mid=(root->left+root->right)>>1;
        Query(root
->lchild,l,mid);
        Query(root
->rchild,mid+1,r);
    }
//若被查詢線段被中間階段,則分別查詢之
}




int main()
{

    
int n,q;
    node 
*root;
    scanf(
"%d%d",&n,&q);
    root
=Build(1,n);//建立線段樹
    int i;
    
for(i=1;i<=n;i++)
    
{
        
int num;
        scanf(
"%d",&num);
        Insert(root,i,num);

    }
//完成全部插入
    for(i=1;i<=q;i++)
    
{
        maxnum
=-99999999;
        minnum
=99999999;

        
int a,b;
        scanf(
"%d%d",&a,&b);
        Query(root,a,b);
        printf(
"%d\n",maxnum-minnum);

    }
//查詢,輸出
    return 0;
}



如果有什么疑問或者改進(jìn)方法(我想進(jìn)辦法也不能把它優(yōu)化到1000MS以下),歡迎留言告訴我;

posted on 2009-07-23 19:29 abilitytao 閱讀(1887) 評(píng)論(5)  編輯 收藏 引用

評(píng)論

# re: POJ 3264 Balanced Lineup(RMQ問題,線段樹解決) 2009-07-24 09:21 nomination

你這種方法會(huì)不會(huì)比較繁瑣難懂,我覺得直觀的用排序算法不就好了嗎?  回復(fù)  更多評(píng)論   

# re: POJ 3264 Balanced Lineup(RMQ問題,線段樹解決)[未登錄] 2009-07-24 12:56 abilitytao

@nomination
同學(xué) 難道你覺得做題的目的僅僅是為了AC嗎?  回復(fù)  更多評(píng)論   

# re: POJ 3264 Balanced Lineup(RMQ問題,線段樹解決) 2009-07-25 15:54 移動(dòng)12530彩鈴

看不懂~你們?cè)谘芯渴裁?nbsp; 回復(fù)  更多評(píng)論   

# re: POJ 3264 Balanced Lineup(RMQ問題,線段樹解決) 2009-08-16 17:04 hellobuy

好文章。  回復(fù)  更多評(píng)論   

# re: POJ 3264 Balanced Lineup(RMQ問題,線段樹解決) 2010-05-09 12:13 wty

lz有個(gè)問題問下,會(huì)不會(huì)有許多節(jié)點(diǎn)永遠(yuǎn)查詢不到,
邊查邊建樹會(huì)不會(huì)好一點(diǎn)  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            最新69国产成人精品视频免费| 亚洲一区二区免费视频| 久久久夜夜夜| 久久久久久999| 噜噜噜91成人网| 欧美成人中文| 久久av免费一区| 久久久久久亚洲精品不卡4k岛国| 久久精品免费播放| 欧美大色视频| 亚洲看片网站| 欧美一区二区三区视频在线观看 | 日韩午夜免费| 一区二区日本视频| 久久成人资源| 欧美国产日韩a欧美在线观看| 欧美日韩国产不卡| 国产乱理伦片在线观看夜一区| 国内精品久久久| 亚洲麻豆一区| 久久精品国产在热久久| 亚洲国产精品成人综合色在线婷婷 | 亚洲视频免费在线| 久久av老司机精品网站导航| 欧美精品亚洲精品| 狠狠干综合网| 亚洲专区一区| 亚洲国产二区| 久久婷婷久久一区二区三区| 欧美手机在线视频| 亚洲韩日在线| 久久国产精品网站| 亚洲精品久久久蜜桃| 欧美在线亚洲综合一区| 欧美日韩中文字幕日韩欧美| 狠狠久久亚洲欧美专区| 日韩视频第一页| 亚洲精品久久久一区二区三区| 性18欧美另类| 亚洲毛片av| 欧美精品激情在线观看| 韩国欧美一区| 欧美亚洲自偷自偷| 国产精品99久久久久久宅男 | 亚洲视频精选| 亚洲第一伊人| 久久综合一区| 在线观看av一区| 久久男人av资源网站| 亚洲一区在线看| 国产精品xvideos88| 99re视频这里只有精品| 欧美激情视频一区二区三区不卡| 久久精品论坛| 一区二区三区在线视频播放| 国产精品久久久久天堂| 亚洲精品国产视频| 亚洲国产成人在线| 欧美成人精精品一区二区频| 亚洲黄网站黄| 91久久在线视频| 欧美69wwwcom| 亚洲美女在线视频| 亚洲国产一区二区三区青草影视| 久久一区二区三区av| 在线观看亚洲精品视频| 麻豆精品在线视频| 久久久综合网| 亚洲精品一区二区三区99| 亚洲精品少妇| 国产精品你懂的在线欣赏| 午夜精品福利视频| 香蕉乱码成人久久天堂爱免费| 国产亚洲精品美女| 男人的天堂亚洲在线| 欧美国产在线视频| 亚洲一区二区在线播放| 午夜欧美视频| 91久久精品视频| 在线视频一区二区| 国产一区二区日韩精品| 女同一区二区| 国产精品久久久久久久午夜| 久久久人成影片一区二区三区观看 | 国产精品成人av性教育| 欧美在线播放| 麻豆精品一区二区av白丝在线| 一区二区欧美日韩| 久久精品色图| 亚洲承认在线| 国产精品a级| 免费观看日韩av| 欧美日韩国产在线一区| 久久国产视频网| 欧美国产精品日韩| 久久狠狠婷婷| 欧美国产精品v| 久久久国产一区二区三区| 欧美成人小视频| 欧美一区二区三区久久精品茉莉花| 久久久久久久国产| 亚洲综合另类| 欧美1区2区| 久久精品1区| 欧美激情一区二区三区不卡| 欧美在线观看一区二区| 欧美福利电影在线观看| 久久久99爱| 欧美激情视频免费观看| 国产日韩av高清| 亚洲人成在线观看| 国模精品一区二区三区色天香 | 久久全国免费视频| 亚洲欧美国产制服动漫| 欧美激情视频在线播放| 久久久久综合网| 国产精品资源| 亚洲深夜激情| 亚洲一区二区三区在线观看视频| 久久在线观看视频| 欧美在线亚洲在线| 欧美亚韩一区| 一本大道久久a久久精品综合| 亚洲激情午夜| 久久资源av| 美女福利精品视频| 一区在线影院| 欧美中文在线观看| 久久精品人人做人人综合| 国产麻豆午夜三级精品| 中文在线一区| 亚洲永久视频| 国产精品视频在线观看| 亚洲视频在线二区| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美寡妇偷汉性猛交| 欧美激情亚洲视频| 亚洲日本一区二区| 欧美黄色aaaa| 一本色道久久综合亚洲精品不卡 | 欧美日韩中文字幕在线视频| 亚洲日本欧美日韩高观看| 亚洲精品日韩激情在线电影| 牛人盗摄一区二区三区视频| 欧美激情视频给我| 一本久久综合亚洲鲁鲁五月天| 欧美人与性动交cc0o| 99视频一区二区| 香蕉免费一区二区三区在线观看| 国产精品免费aⅴ片在线观看| 午夜精品美女久久久久av福利| 久久久久在线观看| 精品粉嫩aⅴ一区二区三区四区| 久久在线免费视频| 欧美一级淫片播放口| 欧美好骚综合网| 日韩午夜在线播放| 亚洲欧美日韩电影| 国产亚洲一区二区三区在线观看 | 欧美成人一区二区在线| a4yy欧美一区二区三区| 国产精品国码视频| 欧美一区二区三区视频在线| 欧美国产在线观看| 一区二区成人精品| 欧美午夜激情小视频| 亚洲精选久久| 亚洲第一二三四五区| 猛干欧美女孩| 亚洲视频综合在线| 免费美女久久99| 亚洲制服av| 亚洲第一网站| 国产精品手机视频| 欧美电影免费观看大全| 亚洲一区在线看| 亚洲国产一二三| 久久午夜色播影院免费高清| 一区二区三区产品免费精品久久75| 国产视频亚洲| 欧美日韩亚洲系列| 另类人畜视频在线| 亚洲综合色在线| 最新国产成人av网站网址麻豆| 欧美一区二区视频免费观看| 亚洲精品一区二区三区蜜桃久| 国产一区视频在线看| 欧美日韩成人网| 麻豆精品91| 久久精品国产视频| 亚洲欧美国产77777| 亚洲精品影院在线观看| 久久夜色精品亚洲噜噜国产mv| 亚洲一区二区综合| av不卡免费看| 日韩午夜黄色| 亚洲久久成人| 亚洲精品一区中文| 亚洲国产乱码最新视频 | 一区二区三区欧美在线|