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

隨筆 - 97, 文章 - 22, 評(píng)論 - 81, 引用 - 0
數(shù)據(jù)加載中……

PKU 3368 Frequent values

 題目鏈接:http://poj.org/problem?id=3368

/*
題意:
    給定一個(gè)長度為N(N <= 100000)的單調(diào)不降數(shù)列Si,然后是Q(Q <= 100000)條詢問
,問給定區(qū)間出現(xiàn)最多的數(shù)的次數(shù)。

解法:
離散化+線段樹 或者 離散化+RMQ

思路:
    由于m很大,詢問的復(fù)雜度必須要log(n),這樣一來就先確定下來是線段樹了,這個(gè)
題目有個(gè)限制條件,所有數(shù)都是單調(diào)不增的排列的,換言之,就是說如果兩個(gè)數(shù)相同的話
,他們之間的所有數(shù)必定也和它們相同。
    于是就有了mlog(n)的算法:
對(duì)于所有的數(shù)均設(shè)定一個(gè)組號(hào),也可以叫離散化吧,相同的數(shù)有相同的組號(hào),然后將各個(gè)
數(shù)的頻率統(tǒng)計(jì)后記錄在一個(gè)數(shù)組中,表示該類數(shù)的大小,對(duì)于輸入的詢問[x, y],直接查
詢它們在哪個(gè)組,分三種情況討論:
1. 如果x和y在一個(gè)組,那么最長長度就是y - x + 1
2. 如果組號(hào)相差1,那么找出兩者的分界點(diǎn)z(假設(shè)z點(diǎn)和x點(diǎn)組號(hào)相同),那么答案就是Max
{z - x + 1, y - z}
3. 如果相差大于1,那么先將兩頭截掉,統(tǒng)計(jì)大的記錄,再和中間那段的最大值比較大小,
中間那段的最大值可以用線段樹或者RMQ區(qū)間查詢最值。
*/


#include 
<iostream>

using namespace std;

#define maxn 100010
typedef 
int Tree_Index;

struct Tree {
    
int Max;
}
T[maxn*4];

struct Pair {
    
int val;
    
int cnt;
}
Pr[maxn];

int PrSize = 0;
int x[maxn], sum[maxn], pos[maxn];
int n, m;

void Build(int p, int l, int r) {
    
if(l == r) {
        T[p].Max 
= Pr[l].cnt;
        
return ;
    }

    
int mid = (l + r) >> 1;
    Build(p
<<1, l, mid);
    Build(p
<<1|1, mid+1, r);
    T[p].Max 
= T[p<<1].Max > T[p<<1|1].Max ? T[p<<1].Max : T[p<<1|1].Max;
}


Tree_Index Query(
int p, int l, int r, int a, int b) {
    
if(l == a && b == r) {
        
return p;
    }

    
int mid = (l + r) >> 1;
    
if(b <= mid) {
        
return Query(p<<1, l, mid, a, b);
    }
else if(mid + 1 <= a){
        
return Query(p<<1|1, mid+1, r, a, b);
    }
else {
        Tree_Index p1 
= Query(p<<1, l, mid, a, mid);
        Tree_Index p2 
= Query(p<<1|1, mid+1, r, mid+1, b);
        
return T[p1].Max > T[p2].Max ? p1 : p2;
    }

}


void ProcessPr() {
    
int i, j;
    PrSize 
= 0;
    
for(i = 1; i <= n; i++{
        
if(x[i] == x[i-1]) {
            Pr[PrSize].cnt
++;
        }
else {
            PrSize
++;
            Pr[PrSize].val 
= x[i];
            Pr[PrSize].cnt 
= 1;
        }

    }

    
for(i = 1; i <= n; i++{
        sum[i] 
= Pr[i].cnt + sum[i-1];
        
for(j = sum[i-1]+1; j <= sum[i]; j++)
            pos[j] 
= i;
    }

}


int findPos(int v) {
    
int l = 0;
    
int r = PrSize;
    
int ans = -1;
    
while(l <= r) {
        
int m = (l + r) >> 1;
        
if(v > sum[m]) {
            l 
= m + 1;
            
if(m > ans)
                ans 
= m;
        }
else
            r 
= m - 1;
    }

    
return ans + 1;
}


int main() {
    
int i;    
    x[
0= INT_MIN;
    
    
while(scanf("%d"&n) != EOF && n) {
        scanf(
"%d"&m);
        
for(i = 1; i <= n; i++{
            scanf(
"%d"&x[i]);
        }

        ProcessPr();
        Build(
11, PrSize);
        
while(m--{
            
int x, y, l, r;
            scanf(
"%d %d"&x, &y);
            l 
= pos[x]; // findPos(x);
            r = pos[y]; // findPos(y);
            if(l == r) {
                printf(
"%d\n", y - x + 1);
            }
else {
                
int ans = (sum[l] - x + 1> (y - sum[r-1]) ? (sum[l] - x +  1) : (y - sum[r-1]);
                
if(l + 1 < r) {
                    Tree_Index p 
= Query(11, PrSize, l+1, r-1);
                    
if(T[p].Max > ans)
                        ans 
= T[p].Max;
                }

                printf(
"%d\n", ans);
            }

        }

    }

    
return 0;
}

posted on 2011-03-29 18:30 英雄哪里出來 閱讀(1226) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 線段樹

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美国产精品劲爆| 亚洲区在线播放| 久久乐国产精品| 亚洲美女视频在线免费观看| 国产精品亚洲аv天堂网| 蜜桃av一区| 欧美一区二视频| 在线亚洲欧美| 亚洲美女啪啪| 欧美激情黄色片| 久久裸体视频| 久久成人羞羞网站| 亚洲综合国产精品| 夜夜嗨av一区二区三区中文字幕 | 亚洲精品久久久久久下一站| 国产一区观看| 国产精品素人视频| 欧美日一区二区在线观看| 免费中文字幕日韩欧美| 久久久久天天天天| 久久精品亚洲精品| 久久大逼视频| 久久不射中文字幕| 欧美一区二区大片| 亚洲欧美日韩在线观看a三区| 一区二区动漫| 日韩一级精品视频在线观看| 亚洲精品乱码久久久久久蜜桃91| 欧美激情第9页| 美女网站在线免费欧美精品| 久久影院午夜论| 久久视频在线看| 久久久欧美精品| 久久综合中文| 欧美国内亚洲| 91久久久久久| 亚洲精品一品区二品区三品区| 亚洲第一级黄色片| 欧美高清免费| 亚洲欧洲三级| 日韩视频在线观看免费| 亚洲免费成人av电影| 99热在线精品观看| 亚洲视频在线一区| 亚洲欧美国产日韩天堂区| 亚洲欧美日韩国产另类专区| 欧美一级在线视频| 久久国产精品久久久久久| 久久人人爽人人爽| 欧美a级片一区| 欧美日韩国语| 国产欧美成人| 黄色成人av| 亚洲精品欧美| 亚洲永久网站| 久久久亚洲精品一区二区三区| 老司机67194精品线观看| 欧美大片18| 亚洲美女在线观看| 午夜电影亚洲| 狂野欧美性猛交xxxx巴西| 欧美激情一二三区| 国产精品久久一级| 狠狠色狠狠色综合日日91app| 亚洲欧洲日本专区| 亚洲在线成人精品| 久久综合久久88| 亚洲精品久久嫩草网站秘色| 亚洲欧美日韩精品在线| 久久综合伊人77777蜜臀| 欧美日韩国产高清| 国产一区二区三区黄视频| 亚洲激情网站| 欧美一区二区成人| 欧美国产精品专区| 亚洲自啪免费| 欧美激情精品久久久久久久变态| 国产精品qvod| 亚洲国产电影| 校园激情久久| 91久久国产自产拍夜夜嗨| 午夜精品久久久久久久| 欧美高清hd18日本| 国产视频欧美视频| 一本在线高清不卡dvd| 久久久久久久久久久久久久一区| 亚洲人成高清| 久久久久高清| 国产精品一级二级三级| 亚洲精品视频免费在线观看| 久久久91精品国产| 99国产精品国产精品毛片| 久久久久9999亚洲精品| 欧美性做爰毛片| 亚洲九九精品| 久久伊伊香蕉| 亚洲欧美日韩网| 欧美日韩亚洲国产精品| 136国产福利精品导航网址应用 | 欧美有码在线视频| 欧美日韩理论| 亚洲精品久久嫩草网站秘色| 久久国产一区| 亚洲男女自偷自拍图片另类| 欧美女激情福利| 亚洲成人资源网| 久久亚洲风情| 亚洲免费一级电影| 国产精品国产馆在线真实露脸| 亚洲精品美女| 欧美高清视频www夜色资源网| 欧美在线看片a免费观看| 国产精品欧美风情| 中文亚洲欧美| 亚洲精品欧美一区二区三区| 欧美 日韩 国产 一区| 在线国产亚洲欧美| 久久人人爽人人| 欧美在线网站| 韩国精品一区二区三区| 久久黄色级2电影| 性欧美长视频| 国产视频不卡| 久久久爽爽爽美女图片| 欧美亚洲免费高清在线观看| 国产欧美韩国高清| 欧美一区二区三区免费看| 亚洲永久免费| 国产美女精品视频| 欧美伊人久久久久久久久影院| 亚洲一二三区精品| 国产精品久久一区二区三区| 亚洲中字黄色| 亚洲综合色婷婷| 国产美女精品| 久久这里只有| 久热精品在线视频| 亚洲精选久久| 99国产精品久久| 国产精品毛片a∨一区二区三区|国| 亚洲免费一在线| 亚洲欧美日韩国产成人| 国内成+人亚洲| 欧美v日韩v国产v| 欧美成人a视频| av成人免费在线| 一区二区三区蜜桃网| 国产欧美大片| 另类图片综合电影| 欧美国产91| 亚洲一区二区三区视频播放| 亚洲欧美日韩精品| 韩日在线一区| 亚洲国内精品| 欧美亚男人的天堂| 久久久久成人精品免费播放动漫| 久久理论片午夜琪琪电影网| 日韩写真视频在线观看| 亚洲一级网站| 在线高清一区| 亚洲精品一区二区三区婷婷月 | 美女成人午夜| 亚洲视频在线观看免费| 校园春色综合网| 亚洲国产日韩欧美| 一本色道久久综合亚洲91| 国产午夜久久久久| 亚洲国产精品电影在线观看| 国产精品成人免费| 美女黄网久久| 国产精品久久久久久久久久ktv | 亚洲一区二区三区久久| 欧美主播一区二区三区美女 久久精品人| 在线观看中文字幕不卡| 一区二区三区|亚洲午夜| 国产一区二区三区四区三区四 | 久久综合99re88久久爱| 欧美精品福利| 久久久欧美精品| 欧美日韩一区二区视频在线| 久久久久网址| 欧美视频手机在线| 欧美福利网址| 国产精品一区视频网站| 91久久亚洲| 黄色成人小视频| 亚洲一区二区免费| 亚洲精品美女在线观看播放| 午夜老司机精品| 亚洲视频精选在线| 麻豆免费精品视频| 久久国产精品一区二区三区四区| 欧美精品福利在线| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品毛片va一区二区三区| 亚洲国产欧美久久| 激情综合久久| 午夜在线成人av| 亚洲伊人伊色伊影伊综合网| 欧美波霸影院|