1.題目鏈結。其實是乙個比較經典的問題,自己對著**手動的畫一下就明白了。主要是弄清楚線段樹維護的到底是個什麼東西,在掃瞄線向上掃瞄的過程中,線段樹維護了當前x軸上有貢獻的線段長度。具體的思路是首先離散化每個點,然後在這些點上打標記,記錄每個點的貢獻,算出當前線段的長度即可。
#include#include #define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
using namespace std;
const int n = 205, inf = 0x3f3f3f3f, mod = 1e9 + 7;
int n;
struct seg
seg(double l, double r, double h, int d) : l(l), r(r), h(h), d(d) {}
bool operator< (const seg& rhs) const
} a[n];
int cnt[n << 2];
double sum[n << 2], all[n];
void push_up(int l, int r, int rt)
void update(int l, int r, int v, int l, int r, int rt)
int m = l + r >> 1;
if (l <= m) update(l, r, v, lson);
if (r > m) update(l, r, v, rson);
push_up(l, r, rt);
}int main()
n <<= 1;
sort(a + 1, a + 1 + n);
sort(all + 1, all + 1 + n);
int m = unique(all + 1, all + 1 + n) - all - 1;
memset(cnt, 0, sizeof cnt);
memset(sum, 0, sizeof sum);
double ans = 0;
for (int i = 1; i < n; ++i)
printf("test case #%d\ntotal explored area: %.2f\n\n", ++kase, ans);
} return 0;
}
HDU 1542 矩形面積並)
problem description 已知atlantis的地圖由許多矩形構成,求它們的面積並。input 題目有多組資料,每組資料的開頭有乙個整數n 1 n 100 表示地圖數,接下來n行,每行4個小數 x1 y1 x2 y2 0 x1資料以0結束 output 對於每組資料,你需要輸出一行 t...
hdu 1542 矩形面積並
如圖 用乙個水平線從下往上進行掃瞄,遇到a線段 cover 1 將其插入線段樹中,線段樹中的每個節點都有個cover值,初始都為0,因此第一條線段插入時不會覆蓋其它線段 顯然的 接著是b線段 cover 1 插入線段樹,與a線段產生覆蓋的區間是第一次計算的面積,覆蓋的區間相當於矩形長,再利用線段樹中...
HDU1542矩形面積並
取出縱向邊按x座標排序,在y方向上建立線段樹。每次查詢當前有效長度len,ans len x i x i 1 其中len為t rt len 查詢完畢後更新y方向上線段樹,入邊 1,出邊 1。1 include2 using namespace std 3 define lson l,m,rt 1 4...