掃瞄線,線段樹 nssl 1459 空間複雜度

2022-06-12 22:39:13 字數 1090 閱讀 4828

由於\(k\leq 10\)所以考慮用總方案減去經過兩個差的絕對值\(\leq k\)的點的路徑數

分類討論一下發現要處理祖先關係和其它關係兩種情況,考慮怎麼去重,可以將這些答案看作乙個個矩形,

然後就是要求矩形的面積並,用掃瞄線+線段樹解決

#include #include #include #include #define rr register

using namespace std;

const int n=300011; typedef long long lll;

struct nodee[n<<1];

struct rec

inline void dfs(int x,int fa)

inline void update(int k,int l,int r,int x,int y,int z)

rr int mid=(l+r)>>1;

if (y<=mid) update(k<<1,l,mid,x,y,z);

else if (x>mid) update(k<<1|1,mid+1,r,x,y,z);

else update(k<<1,l,mid,x,mid,z),update(k<<1|1,mid+1,r,mid+1,y,z);

if (lazy[k]) w[k]=r-l+1;

else w[k]=w[k<<1]+w[k<<1|1];

}inline void add(int lx,int rx,int ly,int ry),q[++tot]=;

}signed main()else add(dfn[x],ifn[x],dfn[y],ifn[y]);

} sort(q+1,q+1+tot);

for (rr int i=1;i

update(1,1,n,q[i].l,q[i].r,q[i].type),ans-=1ll*(q[i+1].x-q[i].x)*w[1];

return !printf("%lld",ans);

}

nssl1459 空間簡單度 掃瞄線,線段樹

n nn個點的一顆樹,合法路徑定義為一條路徑上每個點的編號相差大於k kk。求合法路徑數 首先我們可以求不合法的路徑數,這樣我們就有了k n k nk n個不合法 即不能在同乙個路徑上 的點對。然後這題就和之前一題jzoj6276一樣了 大概就是用矩形表示不合法的路徑,之後用掃麵線求矩形的面積並即可...

線段樹 掃瞄線

pku 1151 hdu1542 atlantis 矩形面積並 題意 給出n個矩形,每個矩形給出左下角座標,右上角座標。然後求矩形並的總面積 思路 浮點數先要離散化 然後把矩形分成兩條邊,上邊和下邊,對橫軸建樹,然後從下到上掃瞄上去,用cnt表示該區間下邊比上邊多幾個,sum代表該區間內被覆蓋的線段...

掃瞄線 線段樹

問題描述 小明的家旁邊有條河流,但最近,周圍的三個工廠開始向這條河排放汙水,這條河的一部分被汙染了,被乙個工廠汙染的部分可以看做乙個矩形,現在小明想知道這條河被汙染的面積是多少。輸入 第一行乙個整數t,表示有多少組資料,之後每一組資料報括三行,每一行有lx,ly,rx,ry四個整數,表示被乙個工廠汙...