codevs 3044 矩形面積求並 (掃瞄線)

2022-05-15 18:16:30 字數 1181 閱讀 3672

/*

之前一直偷懶離散化+暴力做著題 今天搞一下掃瞄線

自己按照線段樹的一般寫法寫的有些問題

因為不用於以前的區間sum

so題解搬運者23333

orz~ 去掉了打標記的過程

同時更新區間的時候先判斷是不是已經需要賦值

還有一些細節的處理

線段樹是離散化之後的x軸建的

每個線段的權值轉移到點上

每個點代表他右側一小段的長度

所以修改[l,r]變為[l,r-1]

另外維護lazy 表示這個區間壓了幾次

只要lazy[k]>0 s[k]就存著值

碰到頂邊就lazy--

每次計算面積用的是s[1] 也就是整個線段的覆蓋部分

對於每次的修改時候查詢的時候只是上傳 最後拿s[1]計算

所以不用下放lazy了就

*/#include

#include

#include

#include

#define maxn 1010

#define lc k*2

#define rc k*2+1

#define mid (l+r)/2

using

namespace

std;

int n,m,lazy[maxn*4

];double b[maxn],s[maxn*4

],ans;

struct

nodea[maxn];

int cmp(const node &x,const node &y)

void up(int k,int l,int

r)void change(int k,int l,int r,int x,int y,int

z)

if(x<=mid)change(lc,l,mid,x,y,z);

if(y>mid)change(rc,mid+1

,r,x,y,z);

up(k,l,r);

}int

main()

sort(b+1,b+1+m);sort(a+1,a+1+m,cmp);

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

printf(

"%.2f\n

",ans);

}return0;

}

CODEVS 3044 矩形面積求並

描述 輸入n個矩形,求他們總共占地面積 也就是求一下面積的並 分析 其實上面的部落格講的講的就很清楚了.就相當於把矩形用許多小矩形來代替.這些小矩形都是有一邊或幾條邊延長後過其他矩形的頂點.這麼一說好像更複雜了.換個說法,就是把所有矩形的邊都作為可無限延長的分割線,將所有矩形分割成小矩形.每個小矩形...

CodeVS3044矩形面積求並

codevs3044矩形面積求並 題解 題目描述 description 輸入n個矩形,求他們總共占地面積 也就是求一下面積的並 輸入描述 input description 可能有多組資料,讀到n 0為止 不超過15組 每組資料第一行乙個數n,表示矩形個數 n 100 接下來n行每行4個實數x1,...

codevs3044 矩形面積求並

這幾天入了資料結構的坑,其實簡單的線段樹 樹狀陣列 左偏樹之類的以前就會的,但是不是很會應用,特別是例如優化dp 擴充套件到高維這些應用上就是渣啊,因為之前對離散化不了解,所以看了hwzer的 好久都沒懂,到最後發現原來這個線段樹維護的並不是乙個數軸,只是乙個陣列而已,乙個陣列有被標記的元素,然後用...