• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              1 隨筆 :: 52 文章 :: 17 評論 :: 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) 評論(0)  編輯 收藏 引用 所屬分類: 數據結構
            久久精品九九亚洲精品| 91精品国产色综合久久| 亚洲精品国产自在久久| 欧美日韩精品久久久免费观看| 久久精品麻豆日日躁夜夜躁| 久久精品国产亚洲AV不卡| 亚洲综合久久夜AV | 91精品国产9l久久久久| 亚洲va久久久久| 久久精品草草草| 久久精品人人做人人爽电影蜜月| 久久这里有精品视频| 久久国产精品-国产精品| 99精品国产综合久久久久五月天| 久久久久久无码国产精品中文字幕| 久久亚洲中文字幕精品一区| 色妞色综合久久夜夜| 久久婷婷色综合一区二区| 麻豆精品久久精品色综合| 色偷偷久久一区二区三区| 亚洲AⅤ优女AV综合久久久| 久久精品人妻一区二区三区| 国产一区二区三精品久久久无广告| 91久久精一区二区三区大全| 91精品国产高清久久久久久io| 人妻精品久久无码区| 久久国产精品二国产精品| 99久久综合狠狠综合久久| 国产精品一区二区久久| 72种姿势欧美久久久久大黄蕉| 热99RE久久精品这里都是精品免费 | 久久99精品国产99久久| 新狼窝色AV性久久久久久| 999久久久无码国产精品| 久久激情五月丁香伊人| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 久久精品中文騷妇女内射| 狠狠色丁香久久婷婷综合_中| 一本色道久久HEZYO无码| 99久久国产综合精品网成人影院| 亚洲精品综合久久|