• <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>

            gzwzm06

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              1 隨筆 :: 52 文章 :: 17 評(píng)論 :: 0 Trackbacks
              1#include <cstdio>
              2
              3const int SIZE = 100101;
              4
              5struct STREE
              6{
              7    int m_start;
              8    int m_end;
              9    int m_left;
             10    int m_right;
             11    int m_num;
             12    int m_srcS;
             13    int m_srcE;
             14    int m_equal;
             15}
            stree[SIZE * 2];
             16int gIndex = 1;
             17
             18int rs_n;
             19int srcS, srcE;
             20
             21void BuildSTree(const int& id, const int& s, const int& e)
             22{
             23    stree[id].m_start = s;
             24    stree[id].m_end = e;
             25    stree[id].m_srcS = 100000;
             26    stree[id].m_srcE = 0;
             27    stree[id].m_num = 0;
             28    stree[id].m_equal = false;
             29
             30    if ( s == e )
             31    {
             32        stree[id].m_equal = true;
             33        return ;
             34    }

             35
             36    int mid = (s + e) >> 1;
             37
             38    stree[id].m_left = gIndex++;
             39    BuildSTree( stree[id].m_left, s, mid );
             40
             41    stree[id].m_right = gIndex++;
             42    BuildSTree( stree[id].m_right, mid + 1, e );
             43}

             44
             45void Insert(const int& id, const int&p, const int& num)
             46{
             47    if ( stree[id].m_num < num )
             48        stree[id].m_num = num;
             49
             50    if ( stree[id].m_srcS > srcS )
             51        stree[id].m_srcS = srcS;
             52    if ( stree[id].m_srcE < srcE )
             53        stree[id].m_srcE = srcE;
             54
             55    if ( stree[id].m_start == p && stree[id].m_end == p )
             56    {
             57        stree[id].m_srcS = srcS;
             58        stree[id].m_srcE = srcE;
             59        return;
             60    }

             61
             62    int mid = (stree[id].m_start + stree[id].m_end) >> 1;
             63
             64    if ( mid >= p )
             65    {
             66        Insert( stree[id].m_left, p, num );
             67    }

             68    else
             69    {
             70        Insert( stree[id].m_right, p, num );
             71    }

             72}

             73
             74void Query(const int& id, const int& s, const int& e)
             75{
             76    if ( stree[id].m_srcS == s && stree[id].m_srcE == e )
             77    {
             78        if ( rs_n < stree[id].m_num )
             79            rs_n = stree[id].m_num;
             80        return;
             81    }

             82    if ( stree[id].m_equal && stree[id].m_srcS <= s && stree[id].m_srcE >= e )
             83    {
             84        if ( rs_n < e - s + 1 )
             85            rs_n = e - s + 1;
             86
             87        return;
             88    }

             89    int l = stree[id].m_left, r = stree[id].m_right;
             90
             91    if ( stree[l].m_srcE >= e )
             92    {
             93        Query( l, s, e );
             94    }

             95    else if ( s > stree[r].m_srcS )
             96    {
             97        Query( r, s, e );
             98    }

             99    else {
            100        Query( l, s, stree[l].m_srcE  );
            101        Query( r, stree[r].m_srcS, e );
            102    }

            103}

            104
            105int arr[SIZE], N, Q;
            106int rs[SIZE][2];
            107
            108int main()
            109{
            110    int i, p;
            111
            112    while ( scanf("%d"&N) && N != 0 )
            113    {
            114        scanf("%d"&Q);
            115        
            116        gIndex = 1;
            117
            118        for ( i = 1; i <= N; ++i )
            119        {
            120            scanf("%d"&arr[i]);
            121        }

            122
            123        srcS = 1;
            124        p = 1;
            125        for ( i = 2; i <= N; ++i )
            126        {
            127            if ( arr[i] != arr[i - 1] )
            128            {
            129                srcE = i - 1;
            130                rs[p][0= srcS;
            131                rs[p][1= srcE;
            132                srcS = i;
            133                p++;
            134            }

            135        }

            136        rs[p][0= srcS;
            137        rs[p][1= N;
            138        
            139        BuildSTree( 01, p );
            140
            141        for ( i = 1; i <= p; ++i )
            142        {
            143            srcS = rs[i][0];
            144            srcE = rs[i][1];
            145            Insert( 0, i, srcE - srcS + 1 );
            146        }

            147
            148        for ( i = 0; i < Q; ++i )
            149        {
            150    
            151            scanf("%d %d"&srcS, &srcE);
            152            rs_n = 0;
            153
            154            if ( srcS == srcE )
            155            {
            156                printf("1\n");
            157            }

            158            else if ( srcS == srcE - 1 )
            159            {
            160                if ( arr[srcS] == arr[srcE] )
            161                    printf("2\n");
            162                else
            163                    printf("1\n");
            164            }

            165            else {
            166                Query( 0, srcS, srcE );
            167                printf("%d\n", rs_n);
            168            }

            169        }

            170
            171        
            172    }

            173
            174    return 0;
            175}
            http://acm.pku.edu.cn/JudgeOnline/problem?id=3368

            代碼惡心了。。。
            posted on 2009-05-08 07:59 閱讀(144) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)
            久久水蜜桃亚洲av无码精品麻豆| 色综合久久精品中文字幕首页| 亚洲国产成人久久综合一| 久久精品一本到99热免费| 久久亚洲中文字幕精品一区四 | 亚洲欧洲久久久精品| 色成年激情久久综合| 国产精品一久久香蕉产线看 | 97精品伊人久久久大香线蕉 | 久久精品无码一区二区三区免费| 久久99精品国产99久久| www.久久热| 日韩精品久久久久久| 狠狠色综合久久久久尤物 | 国产国产成人久久精品| 久久九九亚洲精品| 成人国内精品久久久久影院VR | 久久久网中文字幕| 久久99精品国产99久久| 色综合久久久久网| 久久国产精品二国产精品| 久久久99精品成人片中文字幕| 久久综合伊人77777麻豆| 亚洲人AV永久一区二区三区久久| 国产69精品久久久久久人妻精品| 国产色综合久久无码有码| 热re99久久精品国99热| 99久久99久久久精品齐齐| 亚洲一本综合久久| 久久人人超碰精品CAOPOREN| 人人狠狠综合88综合久久| 亚洲成色www久久网站夜月| 热久久这里只有精品| 亚洲&#228;v永久无码精品天堂久久| 久久天天躁狠狠躁夜夜不卡| 久久人人爽人人爽人人AV东京热 | 精品久久久久中文字| 欧美精品国产综合久久| 国产精品毛片久久久久久久| 久久亚洲中文字幕精品一区| 欧美亚洲色综久久精品国产|