題鏈
對於mark的引入:
如果不引入直接加,會出現某段區間被重複加的現象,要保證若某段區間被覆蓋,則只需要加一次。
#include #include #include #include #include #include //#pragma gcc optimize("o2")
using namespace std;
#define ll long long
#define ll long long
#define ull unsigned long long
#define ls rt<<1
#define rs rt<<1|1
#define one first
#define two second
#define ms 100009
#define inf 1e18
#define mod 99999997
#define pi acos(-1.0)
#define pair pair#define eps 1e-9
ll n,m,k;
struct nodeline[ms*2]; // 記錄一排排的線
ll hx[ms*2]; // 對 x 軸上的座標 hash
ll mark[ms<<3]; // 標記區間是否被覆蓋
ll sum[ms<<3]; // 主要用sum[1]計算被覆蓋區間的總和
ll tli,thx;
bool cmp(node a,node b)
void push_up(int rt,int l,int r)
void update(int l,int r,int l,int r,int rt,ll val)
int m = l+r>>1;
if(m >= l) update(l,r,l,m,ls,val);
if(m < r) update(l,r,m+1,r,rs,val);
push_up(rt,l,r);
}int main();
hx[++tli] = x2;
line[tli] = ;
} sort(hx+1,hx+tli+1);
sort(line+1,line+tli+1,cmp);
thx = 1;
for(int i=2;i<=tli;i++)
ll ans = 0;
for(int i=1;icout << ans << endl;
return 0;
}
洛谷 P5490 模板 掃瞄線
求 n nn 個矩形的面積並 思路 掃瞄線 include include include define ls x 1 define rs x 1 1 define maxn 1000010 using namespace std typedef long long ll int n,x1,x2,y...
P5490 模板 掃瞄線 掃瞄線
題目描述 求 n 個矩形的面積並。輸出格式 一行乙個正整數,表示 n 個矩形的並集覆蓋的總面積。発生 線段樹開小了,因為n變成了兩倍,線段樹就得開4 2 8倍 對每一根掃瞄線,維護所截得的長度,每次乘以兩根掃瞄線高度差就得到了面積並 截得長度用線段樹維護即可 注意線段樹需要離散化 include i...
P5490 模板 掃瞄線
n 給定n nn個矩形左下角和右上角的座標,求該矩形面積並 資料範圍 n 1 05n leq 10 5 n 105sol utio nsolution soluti on將每個矩形看做兩條平行於y yy軸的線段,掃瞄過去即可 需要注意的是給出來的是點,而我們維護的是線段 時間複雜度 o n log ...