poj1151
一開始做的時候,我還用以前做的離散化的方法來離散化這題中的資料,但是後來才發現,它裡面包含了浮點數。不能直接的離散化!必須轉化為整數後,再來影射.又學習了一種離散化的方法。還有就是掃瞄線的方法,第一次聽說,開始看這題的正確**的時候,看半天沒看懂。。。耽誤了好久時間。後來終於明白了什麼是掃瞄線的方法了。呵呵,又學習了!
具體的分析可以看下圖:
在y軸進行離散化。n個矩形的2n個橫邊縱座標共構成最多2n-1個區間的邊界,對這些區間編號,建立起線段樹。
//以y軸來離散化資料
#include
#include
using
namespace std;
struct cline
}lines[210];
struct cnodetree[1000];
int mid(cnode* proot)
int nnodecount=0;
double y[210]; //
記錄y軸的邊
void create(cnode* proot,double l,double r)
template
f bin_search(f s,f e,t val)
return e;
}void insert(cnode* proot,int l,int r)
if(l>=mid(proot)+1)
else
if(r<=mid(proot))
else
if(proot->covers==0)
}void delete(cnode* proot,int l,int r)
if(l>=mid(proot)+1)
else
if(r<=mid(proot))
else
if(proot->covers==0)
}int main()
////把y軸離散化
sort(y,y+yc);
yc=unique(y,y+yc)-y;
sort(lines,lines+lc);
nnodecount=0; //
注意,不然會出現re。
create(tree,0,yc-1-1); //
yc是橫線的條數,yc-1是縱向區間數,從零開始編號
double area=0;
for(i=0;i1;i++)
printf("
test case #%d\n
",ncase);
printf("
total explored area: %.2lf\n
",area);
printf("
\n");
}return
0;}
POJ 1151 線段樹 掃瞄線
cf上遇到一題掃瞄線,二話不說立刻補。該類題目計算座標中邊平行於x,y軸的矩形的覆蓋面積。這樣可以通過離散化x座標,然後建立區間,通過線段樹管理。然後每條掃瞄線更新區間覆蓋和計算面積。對於上面的矩形就有4條掃瞄線,有3個區間。第一條掃瞄線覆蓋1,2區間。第二條掃瞄線覆蓋2,3區間。第三條掃瞄線是第乙...
poj 1151矩形面積並 線段樹
title poj 1151矩形面積並 線段樹 date 2018 10 30 22 35 11 tags 線段樹問題裡的另乙個問題,矩形面積並,之前看lazy更新時看到下面這個的講解,一大堆文字還有一大堆的圖,當時果斷跳過,今天花了一下午加一晚上的時間看了看這塊知識,然後嘗試自己寫出 算是簡單的了...
POJ1151 離散化求矩形面積的並
第一道離散化的題目,雖然是水題,不過還是很高興。include include include using namespace std struct rect define max 103 1 rect a max 1 double x max y max bool flag max max int...