青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

算法學社
記錄難忘的征途
posts - 141,comments - 220,trackbacks - 0

題目描述:

    給出很多矩形,求矩形并的面積。

吐槽:

    1. 經過傻崽大神的教誨,我決定不再向以前那樣惡意縮短代碼了
    2. 看來.... 要慢慢改...
    3. 思路仍然是按照傻崽大神的blog寫的... 然后轉成了zkw版線段樹...

思路分析:

    離散化之后,在腦海中想像一個掃描線,按照y軸從小到大的順序掃過去。
    掃到的肯定是一個x軸的區間集合。 如果遇到了“新邊”就加到集合中,遇到“舊邊”就從集合中減去,每一次需要這樣操作的時候我們就稱之為“事件點”。
    每次遇到事件點的時候,我們就計算一次面積。就是與下個事件點的y的距離乘以這個區間集合的總長度就可以了。
    那么維護這個集合就可以用線段樹了。
    每次遇到新邊就cnt++,否則就cnt--。如果cnt不為0,說明這個節點有邊覆蓋...
    感覺還是樸素版更容易理解一些,寫起來很飄逸~
#include<iostream>
#include<cstdio>
#include<cassert>
#include<algorithm>
using namespace std;
const int V = 400;
int M,len;
struct segment_tree{
    int cnt; double sum;
} seg[V<<2];
struct segment{
    double l,r,y; int flag;
    segment(double x1=0,double x2=0,double y1=0,int p=0):l(x1),r(x2),y(y1),flag(p){}
} num[V];
bool operator < (segment a,segment b){
    return a.y< b.y;
}
double X[V],sum[V<<2];
inline void upt(int x){
    if(seg[x].cnt) seg[x].sum = sum[x];
    else if(x<M) seg[x].sum = seg[x<<1].sum+seg[x<<1|1].sum;
    else seg[x].sum=0;
}
double insert(int l,int r,int p){
//    cout<<l<<" "<<r<<" "<<p<<endl;
    for(l = l+M, r = r+M+2; l^r^1 ; l>>=1 , r>>=1){
        if(l&1^1){ seg[l^1].cnt += p; upt(l^1); }
        if(r&1){ seg[r^1].cnt += p; upt(r^1); }
        upt(l);upt(r);
    }
    upt(r);
    while(l){
        upt(l);    l >>=1;
    }
//    cout<<seg[1].sum<<endl;
    return seg[1].sum;
}
int search(double val){
    int l = 0, r = len;
    while(l<r){
        int mid = l+r >>1;
        if(X[mid]>= val) r = mid;
        else l = mid+1;
    }
    return r;
}
void build_tree(int n){
    for(int i=0;i<30;i++) if((1<<i) > n+1) {
            M = 1<<i; break;
    }
    for(int i=0;i<M*2;i++) sum[i] = seg[i].cnt = seg[i].sum = 0;
    for(int i=0;i<n-1;i++) sum[i+M+1] = X[i+1]-X[i];
    for(int i=M-1;i;i--) sum[i] = sum[i<<1]+sum[i<<1|1];
}
int main(){
    int n,__test=1;
    while(scanf("%d",&n)!=-1 && n){
        double x1,y1,x2,y2;
        int N = 0;
        for(int i =0 ;i<n;i++){
            scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
            X[N] = x1;
            num[N++] = segment(x1,x2,y1,1);
            X[N] = x2;
            num[N++] = segment(x1,x2,y2,-1);
        }
        sort(X,X+N);
        sort(num,num+N);
        len = 1;
        for(int i=1;i<N;i++){    
            if(X[i]!=X[i-1]) X[len++] = X[i];
        }
        build_tree(len);
        double ans = 0;
        for(int i=0;i<N-1;i++){
            int l = search(num[i].l);
            int r = search(num[i].r)-1;
            ans += insert(l,r,num[i].flag) * (num[i+1].y - num[i].y);
//            cout<<ans<<endl;
        }
//        cout<<ans<<endl;
        printf("Test case #%d\nTotal explored area: %.2lf\n\n",__test++, ans);
    }
    return 0;
}
posted on 2012-05-08 16:49 西月弦 閱讀(778) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告經典題目
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二三| 蜜桃精品久久久久久久免费影院| 久久综合99re88久久爱| 免费久久99精品国产| 在线欧美亚洲| 欧美精品成人一区二区在线观看| 亚洲精品免费在线播放| 麻豆国产精品777777在线| 久久aⅴ国产紧身牛仔裤| 亚洲高清免费视频| 一区二区三区日韩欧美| 国产日韩欧美成人| 欧美福利视频在线| 香蕉久久久久久久av网站| 亚洲人成7777| 亚洲无限av看| 亚洲风情在线资源站| 999在线观看精品免费不卡网站| 久久精品亚洲一区| 国产欧美精品xxxx另类| 欧美成在线视频| 久久精品中文字幕免费mv| 亚洲精品中文字幕女同| 亚洲电影下载| 亚洲午夜女主播在线直播| 久久精品五月| 国产精品久久久久久超碰 | 久久视频在线视频| 午夜精品久久久久久久久久久久| 欧美国产综合| 欧美高潮视频| 1024成人| 中国成人亚色综合网站| 黄色一区三区| 国产视频久久网| 亚洲黄色在线| 亚洲欧洲在线视频| 亚洲成人在线观看视频| 亚洲婷婷在线| 男女激情久久| 亚洲第一在线| 午夜精品福利电影| 欧美三区在线观看| 欧美日韩精品久久| 欧美精品在线视频| 欧美成人一二三| 国产午夜精品久久| 亚洲主播在线| 日韩视频在线播放| 免费观看亚洲视频大全| 免费久久99精品国产自在现线| 国产精品理论片| 国产精品久久久久久久久久尿| 亚洲第一级黄色片| 久久亚洲国产成人| 欧美高清视频一区| 久久精选视频| 韩国成人福利片在线播放| 亚洲国产aⅴ天堂久久| 91久久在线播放| 老司机免费视频一区二区| 男女激情视频一区| 欧美一区午夜视频在线观看| 欧美视频福利| 亚洲天堂免费观看| 亚洲一区二区成人| 久久久久久一区二区| 欧美xxx成人| 亚洲国产综合在线看不卡| 免费在线观看精品| 美腿丝袜亚洲色图| 亚洲人永久免费| 亚洲黄页一区| 欧美一级理论片| 欧美喷潮久久久xxxxx| 亚洲精品乱码久久久久久日本蜜臀| 一本综合精品| 狂野欧美一区| 媚黑女一区二区| 99综合视频| 亚洲丝袜av一区| 国产视频一区在线观看| 卡通动漫国产精品| 欧美岛国激情| 亚洲欧美日韩综合| 久久不射电影网| 日韩网站免费观看| 在线观看成人网| 国产女人aaa级久久久级| 亚欧成人在线| 亚洲精选中文字幕| 国产精品v欧美精品v日韩精品| 国产亚洲一区二区三区| 日韩一级在线观看| 麻豆成人小视频| 欧美成人免费大片| 亚洲欧美精品在线| 久久久久久夜精品精品免费| 亚洲开发第一视频在线播放| 久久久噜噜噜| 小处雏高清一区二区三区| 亚洲大胆人体视频| 在线视频欧美日韩精品| 欧美成人激情在线| 亚洲天堂免费在线观看视频| 久久精品1区| 国产亚洲成年网址在线观看| 欧美丰满少妇xxxbbb| 欧美三级不卡| 欧美黄色一级视频| 国产欧美精品一区| 亚洲免费电影在线| 亚洲高清免费视频| 欧美一二三区精品| 亚洲综合国产激情另类一区| 久久亚洲综合| 久久亚洲春色中文字幕| 国产精品青草综合久久久久99| 亚洲免费一在线| 免费在线观看一区二区| 久久久91精品国产一区二区精品| 欧美精品一区在线播放| 免费不卡在线观看av| 国产一区二区三区四区| 亚洲综合好骚| 狠狠色综合色综合网络| 亚洲与欧洲av电影| 在线午夜精品| 欧美成熟视频| 女生裸体视频一区二区三区| 国产视频久久网| 亚洲欧美日韩精品在线| 午夜精品免费视频| 国产精品美女www爽爽爽视频| 亚洲欧洲三级电影| 亚洲日本成人网| 欧美激情久久久| 亚洲日本va午夜在线影院| 亚洲人午夜精品| 欧美精品在线网站| av成人免费在线| 国产亚洲欧美日韩一区二区| 亚洲午夜精品一区二区三区他趣| 一区二区三区四区国产| 欧美日韩国产在线观看| 亚洲另类春色国产| 亚洲一区二区三区欧美| 欧美一区二区在线观看| 欧美专区日韩专区| 国产欧美一区二区色老头 | 国产综合亚洲精品一区二| 亚洲欧美日韩国产成人| 欧美日韩亚洲成人| 久久久噜噜噜久久| 国产在线高清精品| 久久人人97超碰国产公开结果| 久久三级福利| 91久久精品国产91久久性色tv| 欧美成人资源网| 在线一区二区三区四区五区| 午夜一级久久| 韩国av一区二区三区四区| 免费成人毛片| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美激情在线狂野欧美精品| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产色产综合色产在线视频| 久久av一区二区三区漫画| 免费在线视频一区| 99精品国产在热久久下载| 国产精品白丝jk黑袜喷水| 欧美专区中文字幕| 亚洲国产高清自拍| 亚洲综合二区| 亚洲国产欧美一区二区三区丁香婷| 欧美激情在线免费观看| 亚洲特色特黄| 欧美激情一区二区三区在线视频观看 | 久久人91精品久久久久久不卡| 亚洲国产成人久久综合一区| 欧美视频在线免费| 久久久噜噜噜久久中文字幕色伊伊| 欧美激情网站在线观看| 午夜精品久久久久久久男人的天堂 | 裸体一区二区| 亚洲一区视频在线观看视频| 能在线观看的日韩av| 亚洲欧美国产精品va在线观看 | 伊人天天综合| 国产精品视频xxxx| 欧美高清视频www夜色资源网| 亚洲一级特黄| 亚洲人体大胆视频| 欧美jjzz| 久久久久免费观看| 亚洲摸下面视频| av成人手机在线| 激情六月婷婷久久| 国产日韩欧美中文在线播放| 欧美日韩在线不卡一区|