開花 紀中1742 線段樹

2021-07-14 22:35:45 字數 2353 閱讀 8869

description

在遙遠的火星上,上面的植物非常奇怪,都是長方形的,每個植物用三個數來描述:左邊界l、右邊界r以及高度h,如下圖所示描述乙個植物:l=2,r=5和h=4。

每天都有乙個新植物長出來,第一天的植物高度為1,後面每天長出的植物比前一天的高1。

當乙個新植物長出來的時候,跟其他植物的水平線段相交處會長出一朵小花(前提是之前沒有長出花朵),如果線段交於端點,是不會長花的。

下圖為示意圖:

給出每天的植物的座標,計算每天長出多少新花。

第一行包含乙個整數n(1<=n<=100000),表示天數。

接下來n行,每行兩個整數l和r(1<=l<=r<=100000),表示植物的左右邊界。

輸出每天長出新植物後增加新花的數量。

看到線段和區間就要想到線段樹,這是應該的吧

維護一棵線段樹,記錄區間上有多少線段覆蓋

每次查詢當前線段的l,l和r,r線段覆蓋數,減去重複的u[l]和u[r]就是答案

(自行畫圖理解一下)

type

tree=record

l,r,c:longint;

end;

var t:array[0..801872]of tree;

u:array[0..100000]of longint;

ans,p:longint;

procedure

build

(f,x,y:longint);

var mid:longint;

begin

t[f].l:=x;

t[f].r:=y;

if y=x then

exit;

mid:=(x+y)div

2; build(f*2,x,mid);

build(f*2+1,mid+1,y);

end;

procedure

add(f,x,y:longint);

var mid:longint;

begin

mid:=(t[f].l+t[f].r)div

2; if (x=t[f].l)and(y=t[f].r) then

inc(t[f].c)

else

if (y<=mid) then

add(f*2,x,y)

else

if (x>=mid+1) then

add(f*2+1,x,y)

else

begin

add(f*2,x,mid);

add(f*2+1,mid+1,y);

end;

end;

procedure

find

(f,x,y:longint);

var mid:longint;

begin

ans:=ans+t[f].c;

mid:=(t[f].l+t[f].r)div

2; if (t[f].l=x)and(t[f].r=y) then

exit

else

if y<=mid then

find(f*2,x,y)

else

if x>=mid+1

then

find(f*2+1,x,y)

else

begin

find(f*2+1,x,mid);

find(f*2+1,mid+1,y);

end;

end;

procedure

main;

var n,i,j,k:longint;

x,y,g:longint;

begin

readln(n);

build(1,1,100000);

for i:=1

to n do

begin

readln(x,y);

ans:=0;

find(1,x,x);

j:=ans;

find(1,y,y);

k:=ans-j;

writeln(ans-u[x]-u[y]);

u[x]:=j+1;

u[y]:=k+1;

add(1,x,y);

end;

end;

begin

main;

end.

開花 紀中 1435 線段樹

在遙遠的火星上,上面的植物非常奇怪,都是長方形的,每個植物用三個數來描述 左邊界l 右邊界r以及高度h,如下圖所示描述乙個植物 l 2,r 5和h 4。每天都有乙個新植物長出來,第一天的植物高度為1,後面每天長出的植物比前一天的高1。當乙個新植物長出來的時候,跟其他植物的水平線段相交處會長出一朵小花...

(紀中)2173 無根樹 tree SPFA

file io input tree.in output tree.out 時間限制 1000 ms 空間限制 131072 kb 具體限制 goto problemset 題目描述 味味最近對樹很感興趣,什麼是樹呢?樹就是有n nn個點和n 1 n 1n 1條邊形成的無環連通無向圖。今年2012 ...

2017紀中10 24 合影 樹型DP 組合數學

題面 因為每個人只有乙個要求,假如a要求在b左邊,a就向b連一條邊的話,就是乙個帶環樹。當然,有環直接無解。所以剩下的是森林。我們把子樹看成乙個子問題,假如知道了子樹內部的答案如何轉移到父親。設當前轉移x,x的所有子樹都應該安排在x左邊,也就是首先有size x 1個空來安排,每安排乙個子樹剩下的空...