• <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++博客 :: 首頁(yè) :: 新隨筆 :: 聯(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 閱讀(151) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 數(shù)據(jù)結(jié)構(gòu)
            国产精品gz久久久| 亚洲色婷婷综合久久| 久久精品二区| 久久久久久精品无码人妻| 久久久久久亚洲精品成人| 91久久精品电影| 亚洲精品无码成人片久久| 国产一区二区精品久久岳| 亚洲va久久久噜噜噜久久| 久久国产成人午夜aⅴ影院| 亚洲国产欧美国产综合久久| 精品国产乱码久久久久久浪潮| 国产A级毛片久久久精品毛片| 久久国产精品免费一区| 久久精品国产亚洲AV麻豆网站 | 国产欧美久久一区二区| 久久亚洲精品无码aⅴ大香| 精品久久久久中文字幕日本| 伊人久久精品影院| 久久国产影院| 久久久久国产| 久久精品国产99国产精品| 久久精品视频免费| 国产成人久久激情91| 精品久久久久香蕉网| 国产精品久久午夜夜伦鲁鲁| 一本一本久久A久久综合精品| 亚洲国产香蕉人人爽成AV片久久| 99久久综合狠狠综合久久| 国内精品久久久久久久涩爱 | 久久超碰97人人做人人爱| 99久久精品国产一区二区| 2021国产精品午夜久久| 99久久做夜夜爱天天做精品| 欧美精品福利视频一区二区三区久久久精品 | 久久久久久久综合日本亚洲| 国产成人无码精品久久久性色| 日韩欧美亚洲综合久久| 亚洲精品乱码久久久久久中文字幕| 久久天天躁狠狠躁夜夜躁2014| 久久婷婷五月综合色奶水99啪 |