HDU 4419 矩形面積並

2021-06-09 18:06:39 字數 2102 閱讀 1797

這題貌似想法挺簡單的。

跟普通的矩形並變形一下

把三種顏色分別對應乙個二進位制位,那麼用十進位制數表示r, g, b, rg, rb, gb, rgb

就是 1,2,4,3,5,6,7

然後在pushup操作中把這些東西更新一下就行了

注意,普通矩形並是一條線段表示進入矩形,另一條表示出了矩形,那麼本題中就對三種顏色分別記錄了

當時比賽的時候寫的比較蛋疼。完全是碼農寫法。其實完全可以寫的很精簡。

#include #include #include #include #include #include #include #include #include #define maxn 41111

#define maxm 555555

#define inf 1000000011

#define lch(x) x<<1

#define rch(x) x<<1|1

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

using namespace std;

int n;

struct rec

p[maxn];

struct seg

seg(int xx, long long a, long long b, long long c, int d)

bool operator <(const seg &cmp)const

} seg[maxn * 2];

long long x[maxn * 2];

int bin(int low, int high, long long v)

return -1;

}long long sum[4 * maxn][9];

int cnt[4 * maxn];

int num[4 * maxn][5];

long long ans[9];

int get(char *s)

void up(int rt, int l, int r)

else if(cnt[rt] == 6)

else

}else if(cnt[rt] == 5)

else

}else if(cnt[rt] == 4)

else

}else if(cnt[rt] == 3)

else

}else if(cnt[rt] == 2)

else

}else if(cnt[rt] == 1)

else

}else

else

}}void update(int l, int r, int v, int l, int r, int rt)

}up(rt, l, r);

return;

}int m = (l + r) >> 1;

if(l <= m) update(l, r, v, lson);

if(r > m) update(l, r, v, rson);

up(rt, l, r);

}int main()

sort(x, x + m);

sort(seg, seg + m);

int kx = unique(x, x + m) - x;

for(int i = 0; i < m - 1; i++)

for(int j = 1; j <= 7; j++)

ans[j] += sum[1][j] * (seg[i + 1].h - seg[i].h) ;

}printf("case %d:\n", ++cas);

printf("%i64d\n", ans[1]);

printf("%i64d\n", ans[2]);

printf("%i64d\n", ans[4]);

printf("%i64d\n", ans[3]);

printf("%i64d\n", ans[5]);

printf("%i64d\n", ans[6]);

printf("%i64d\n", ans[7]);

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