題目大意:求多個矩形重合後的周長和
題目思路:從上到下來一遍掃瞄線,從左到右來一遍掃瞄線。然後每次更新線段樹後整體解與之前的結果相減取絕對值就是新的周長。可以畫圖理解。
以下是**:
#include#include#include#include#includeusing namespace std;
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
const int maxn = 1e5+5;
const int mod = 1e9+7;
struct nodea[maxn<<2];
struct segb[maxn];
struct seg2d[maxn];
int c[maxn];
bool cmp(seg a,seg b)
void push_up(int rt)
else if(a[rt].l==a[rt].r)a[rt].val = 0;
else a[rt].val=a[rt<<1].val+a[rt<<1|1].val;
}void update(int rt,int l,int r,int val)
int mid=(a[rt].l+a[rt].r)>>1;
if(l<=mid)update(rt<<1,l,r,val);
if(r>mid)update(rt<<1|1,l,r,val);
push_up(rt);
}int main()
sort(b+1,b+num,cmp);
sort(c,c+p);
p=unique(c,c+p)-c;
build(1,0,p);
int ans=0,late=0;
rep(i,1,2*n)
late=0;
build(1,0,p);
sort(d+1,d+num,cmp2);
rep(i,1,2*n)
printf("%d\n",ans);
}return 0;
}
Poj1177 求矩形並的輪廓周長
題意 給出多個矩形,求這些矩形所覆蓋圖形的周長。可用線段樹來做,兩種方法 1 分別對x和y方向離散化後做線段樹,求出各方向上的輪廓長 2 對乙個方向上的座標進行離散化,用另一維進行掃瞄 1 覆蓋的線段長度 2 不相邊的線段數 3 該節點表示的區間兩端點是否被覆蓋 用於合併線段 code includ...
線段樹輔助 掃瞄線法計算矩形周長並(輪廓線)
例題 hdu 1828 picture 有兩種方法,不過常用的第二種,兩種都說一下。第一種 把矩形分成橫線和豎線去處理,可知是完全相同的操作,我們來講下怎麼算出橫線部分,豎線部分就是照搬即可。將橫線儲存在乙個表中,按橫線所處的豎直位置排序 公升序 另外每條橫線帶乙個標記值,原矩形的下線為1,上線為 ...
POJ 1177 Picture(線段樹 掃瞄線)
description 求n個矩形的周長並 input 第一行為一整數n表示矩形個數,之後n行每行四個整數x1,y1,x2,y2表示該矩形左下端點與右上端點的橫縱座標 output 輸出這n個矩形的周長並 sample input 7 15 0 5 10 5 8 20 25 15 4 24 14 0...