問題描述
小明的家旁邊有條河流,但最近,周圍的三個工廠開始向這條河排放汙水,這條河的一部分被汙染了,被乙個工廠汙染的部分可以看做乙個矩形,現在小明想知道這條河被汙染的面積是多少。
輸入
第一行乙個整數t,表示有多少組資料,之後每一組資料報括三行,每一行有lx, ly, rx, ry四個整數,表示被乙個工廠汙染的矩形的左下角與右上角,保證每個數都在[-100000,100000]之間,lx
輸出
對於每組資料輸出一行,每行乙個整數表示被汙染的面積。
樣例輸入1
1 1 4 4
3 2 6 3
5 1 8 4
樣例輸出19
思路。這題很簡單,就是簡單的容斥原理即可
#include #include #include using namespace std;
#include struct point
point(){}
};typedef long long ll;
struct rect
rect(point a, point b) : l(a), r(b) {}
ll area()
rect getit(rect s)
};int main(void)
return 0;
同時,這題還可以用掃瞄線的方法來做:
講的通俗易懂
#include#include#includeusing namespace std;
const int maxn = 10000;
struct line;
line(int ll,int rr,int h,int c):ll(ll),rr(rr),h(h),c(c){};
bool operator<(const line &b)
if(tree[root].rr - tree[root].ll == 1)
update(root*2 , ll, rr, cover);
update(root*2+1 ,ll, rr, cover);
}int query(int root, int ll, int rr)
if(tree[root].rr - tree[root].ll == 1) return 0;
int ans =0;
ans += query(root *2, ll, rr);
ans += query(root*2+1, ll, rr);
return ans;
} int main()
sort(x_ind+1,x_ind+j+1);
sort(lines+1,lines+kk+1);
int q=1;
for(int i=1;i<=j;i++)
x_ind[0] = q;
create(1,1,q);
int ans =0;
for(int i=1;i
線段樹 掃瞄線
pku 1151 hdu1542 atlantis 矩形面積並 題意 給出n個矩形,每個矩形給出左下角座標,右上角座標。然後求矩形並的總面積 思路 浮點數先要離散化 然後把矩形分成兩條邊,上邊和下邊,對橫軸建樹,然後從下到上掃瞄上去,用cnt表示該區間下邊比上邊多幾個,sum代表該區間內被覆蓋的線段...
線段樹 掃瞄線
掃瞄線問題主要利用了線段樹。因為矩形的並集比較難算,所以我們可以用 sum 掃瞄線被截長度 所掃瞄的高度 來求和。而這樣做發現可以用線段樹來優化,具體優化方式如下 所掃瞄的高度比較好求,主要是掃瞄線被截長度需要優化。我們可以設橫邊有乙個a權值,如果該邊是矩陣的下邊則設為1,相反就設為 1,這樣如果一...
線段樹 掃瞄線
這其實是計算幾何的一部分。一般被用來解決圖形面積 周長等問題。求給定的 n 個矩形的面積並 如圖 從左到右掃 若乙個矩形的左下頂點座標為 x 1,y 1 右上頂點座標為 x 2,y 2 模板 includeusing namespace std define int long long const ...