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

            POJ 3277 City Horizon 線段樹+離散化

            Description

            Farmer John has taken his cows on a trip to the city! As the sun sets, the cows gaze at the city horizon and observe the beautiful silhouettes formed by the rectangular buildings.

            The entire horizon is represented by a number line with N (1 ≤ N ≤ 40,000) buildings. Building i's silhouette has a base that spans locations Ai through Bi along the horizon (1 ≤ Ai < Bi ≤ 1,000,000,000) and has height Hi (1 ≤ Hi ≤ 1,000,000,000). Determine the area, in square units, of the aggregate silhouette formed by all N buildings.

            Input

            Line 1: A single integer: N
            Lines 2..N+1: Input line i+1 describes building i with three space-separated integers: Ai, Bi, and Hi

            Output

            Line 1: The total area, in square units, of the silhouettes formed by all N buildings

            Sample Input

            4
            2 5 1
            9 10 4
            6 8 2
            4 6 3

            Sample Output

            16

            Hint

            The first building overlaps with the fourth building for an area of 1 square unit, so the total area is just 3*1 + 1*4 + 2*2 + 2*3 - 1 = 16.

            Source

                題目的意思是說:平面上有[1,40000]個建筑,每個建筑有一個區間[Ai,Bi]表示它的跨度,Hi表示其高度。要求這n個建筑的平面覆蓋面積。
            由于Ai,Bi∈[1,1000000000],直接將線段[Ai,Bi]插入線段樹空間消耗太大,可以將這n條線段的2n個端點離散化到一個數組X[0...2n-1],然后再將其插入線段樹,最后求出面積。
            #include <iostream>
            using namespace std;

            const int MAXN = 40010;
            struct segment{
                
            int left,right,h;
            }
            tree[MAXN*3];
            int pos[MAXN][3],x[MAXN*2],len;

            int cmp1(const void *a,const void *b){
                
            return *(int *)a-*(int *)b;
            }

            int cmp2(const void *a,const void *b){
                
            return *((int *)a+2)-*((int *)b+2);
            }

            int query(int h){
                
            int low=0,high=len-1,mid;
                
            while(low<=high){
                    mid
            =(low+high)>>1;
                    
            if(x[mid]==h) return mid;
                    
            else if(x[mid]>h) high=mid-1;
                    
            else low=mid+1;
                }

                
            return -1;
            }

            void create(int l,int r,int index){
                tree[index].left
            =l,tree[index].right=r;
                tree[index].h
            =0;
                
            if(r==l+1return;
                
            int mid=(l+r)>>1;
                create(l,mid,
            2*index);
                create(mid,r,
            2*index+1);
            }

            void update(int l,int r,int h,int index){
                
            if(h<tree[index].h) return;
                
            if(l==tree[index].left && r==tree[index].right){
                    tree[index].h
            =h;
                    
            return;
                }

                
            if(tree[index].h>=0 && tree[index].right>tree[index].left+1){
                    tree[
            2*index].h=tree[2*index+1].h=tree[index].h;
                    tree[index].h
            =-1;
                }

                
            int mid=(tree[index].left+tree[index].right)>>1;
                
            if(r<=mid)
                    update(l,r,h,
            2*index);
                
            else if(l>=mid)
                    update(l,r,h,
            2*index+1);
                
            else{
                    update(l,mid,h,
            2*index);
                    update(mid,r,h,
            2*index+1);
                }

            }

            long long cal(int index){
                
            if(tree[index].h>=0)
                    
            return tree[index].h*(long long)(x[tree[index].right]-x[tree[index].left]);
                
            else
                    
            return cal(2*index)+cal(2*index+1);
            }

            int main(){
                
            int n,i,k,l,r;
                scanf(
            "%d",&n);
                
            for(i=len=0;i<n;i++,len+=2){
                    scanf(
            "%d %d %d",&pos[i][0],&pos[i][1],&pos[i][2]);
                    x[len]
            =pos[i][0],x[len+1]=pos[i][1];
                }

                qsort(x,
            2*n,sizeof(int),cmp1);
                
            for(i=1,k=0;i<2*n;i++)
                    
            if(x[i]!=x[i-1]) x[k++]=x[i-1];
                x[k
            ++]=x[i-1],len=k;
                qsort(pos,n,
            3*sizeof(int),cmp2);
                create(
            0,len-1,1);
                
            for(i=0;i<n;i++){
                    l
            =query(pos[i][0]),r=query(pos[i][1]);
                    update(l,r,pos[i][
            2],1);
                }

                printf(
            "%I64d\n",cal(1));
                
            return 0;
            }

            posted on 2009-05-13 15:50 極限定律 閱讀(913) 評論(0)  編輯 收藏 引用 所屬分類: ACM/ICPC

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            導航

            統計

            常用鏈接

            留言簿(10)

            隨筆分類

            隨筆檔案

            友情鏈接

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲国产精品久久久久| 欧美国产成人久久精品| 久久久久久曰本AV免费免费| 久久久精品2019免费观看| 色天使久久综合网天天| 国内精品久久久久久久影视麻豆| 人妻少妇久久中文字幕 | 91精品国产91久久综合| 久久精品国产99国产精品亚洲| 久久久WWW免费人成精品| 久久精品亚洲乱码伦伦中文| 久久精品麻豆日日躁夜夜躁| 久久久久久久91精品免费观看 | 精品熟女少妇aⅴ免费久久| 国产AV影片久久久久久| 久久天天躁狠狠躁夜夜av浪潮| 亚洲精品WWW久久久久久| 久久精品国产亚洲AV影院| 亚洲AV日韩AV天堂久久| 国产精品美女久久久久网| 99久久国语露脸精品国产| 精品多毛少妇人妻AV免费久久| 欧美伊人久久大香线蕉综合69| 久久午夜福利无码1000合集| 伊人久久大香线蕉成人| 精品乱码久久久久久久| 精品无码久久久久久久久久| 久久国产高清字幕中文| 亚洲欧美日韩久久精品| 99久久超碰中文字幕伊人| 精品无码久久久久久久久久| 亚洲Av无码国产情品久久| 精品国产乱码久久久久久1区2区| 国産精品久久久久久久| 久久发布国产伦子伦精品| 久久人人超碰精品CAOPOREN| 思思久久99热只有频精品66| 国内精品久久久久久久97牛牛| 亚洲精品99久久久久中文字幕 | 久久亚洲电影| 久久亚洲av无码精品浪潮|