HDU 1542 矩形的面積並求解

2021-09-20 10:18:29 字數 1210 閱讀 9399

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