• <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 評論 :: 0 Trackbacks
              1#include <cstdio>
              2#include <algorithm>
              3using namespace std;
              4
              5const int SIZE = 100001;
              6
              7struct RANGE
              8{
              9    int m_S, m_E;
             10    int m_p;
             11
             12    //按區(qū)間右端從大到小排序,再按左端從小到大排
             13    //將左端依序插入線段樹,即將區(qū)間將大先放入,就能得出包含關(guān)系
             14    bool operator < (const RANGE& other)
             15    {
             16        if ( m_E != other.m_E )
             17            return (m_E > other.m_E);
             18        
             19        return (m_S < other.m_S);
             20    }

             21}
            cow[SIZE];
             22
             23//線段樹
             24struct STREE
             25{
             26    int m_leftPos, m_rightPos;
             27    int m_left, m_right;
             28    int m_ItNum;                //記錄區(qū)間的左端個數(shù)
             29}
            tree[SIZE * 2];
             30
             31int N, result[SIZE];
             32
             33void BuildSTree(int& index, const int& l, const int& r)
             34{
             35    int id = index;
             36    tree[id].m_left = l, tree[id].m_right = r;
             37    tree[id].m_ItNum = 0;
             38    if ( l == r )
             39    {
             40        tree[id].m_leftPos = tree[id].m_rightPos = -1;
             41        return ;
             42    }

             43
             44    int mid = (l + r) >> 1;
             45
             46    tree[id].m_leftPos = ++index;
             47    BuildSTree( index, l, mid );
             48    tree[id].m_rightPos = ++index;
             49    BuildSTree( index, mid + 1, r );
             50}

             51
             52int Insert(const int& id, const int& s)
             53{
             54    int num = 0;
             55    if ( tree[id].m_left == s && tree[id].m_right == s )
             56    {
             57        tree[id].m_ItNum++;
             58        return (tree[id].m_ItNum - 1);
             59    }

             60
             61    int mid = (tree[id].m_left + tree[id].m_right) >> 1;
             62
             63    if ( s <= mid ) {
             64        tree[id].m_ItNum++;
             65        num += Insert(tree[id].m_leftPos, s);
             66    }

             67    else {
             68        num = tree[id].m_ItNum;
             69        num += Insert(tree[id].m_rightPos, s);
             70    }

             71
             72    return num;
             73}

             74
             75int main()
             76{
             77    freopen("1.txt""r", stdin);
             78    int i, t, maxN;
             79
             80    while ( true )
             81    {
             82        scanf("%d"&N);
             83        if ( N == 0 )
             84            break;
             85        
             86        maxN = 0;
             87        for ( i = 0; i < N; ++i )
             88        {
             89            scanf("%d %d"&cow[i].m_S, &cow[i].m_E);
             90            cow[i].m_p = i;
             91            if ( cow[i].m_E > maxN )
             92                maxN = cow[i].m_E;
             93        }

             94        t = 0;
             95        BuildSTree(t, 0, maxN);
             96        sort(cow, cow + N);
             97
             98        result[cow[0].m_p] = Insert(0, cow[0].m_S);
             99        for ( i = 1; i < N; ++i )
            100        {
            101            result[cow[i].m_p] = Insert(0, cow[i].m_S);
            102            //處理區(qū)間相等的情況,插入操作還是照做,結(jié)果就為等價
            103            if ( cow[i].m_E == cow[i - 1].m_E && cow[i].m_S == cow[i - 1].m_S )
            104                result[cow[i].m_p] = result[cow[i - 1].m_p];
            105        }

            106
            107        for ( i = 0; i < N - 1++i )
            108        {
            109            printf("%d ", result[i]);
            110        }

            111        printf("%d\n", result[i]);
            112    }

            113    return 0;
            114}
            posted on 2009-04-11 16:15 閱讀(232) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)
            天堂无码久久综合东京热| 久久久久国产一级毛片高清板| 国产精品视频久久久| 久久久久av无码免费网| 久久婷婷色综合一区二区| 亚洲国产另类久久久精品小说| 久久婷婷五月综合97色直播| 亚洲精品高清久久| 久久夜色精品国产亚洲| 国产精品久久久久AV福利动漫| 久久国产精品99国产精| 7777久久久国产精品消防器材| 奇米综合四色77777久久| 亚洲精品乱码久久久久66| 麻豆亚洲AV永久无码精品久久 | 久久久久久久免费视频| 久久久免费观成人影院 | 国产三级观看久久| 嫩草影院久久99| 国内精品久久久久影院网站 | 久久国产精品国语对白| 久久精品国产亚洲精品| 伊色综合久久之综合久久| 亚洲人成无码久久电影网站| 久久久国产99久久国产一| 久久这里只精品99re66| 亚洲精品tv久久久久久久久| 精品综合久久久久久97超人 | 精品无码人妻久久久久久| 亚洲国产综合久久天堂| 亚洲国产精品成人久久| 国产欧美一区二区久久| 久久久久无码精品| 久久人爽人人爽人人片AV | 午夜精品久久久久久| 狠狠色综合网站久久久久久久高清 | 99久久精品国产一区二区三区| 亚洲Av无码国产情品久久| 精品国产乱码久久久久久郑州公司 | 久久久久亚洲av无码专区喷水| 国产精品欧美亚洲韩国日本久久|