在遙遠的火星上,上面的植物非常奇怪,都是長方形的,每個植物用三個數來描述:左邊界l、右邊界r以及高度h,如下圖所示描述乙個植物:l=2,r=5和h=4。
每天都有乙個新植物長出來,第一天的植物高度為1,後面每天長出的植物比前一天的高1。
當乙個新植物長出來的時候,跟其他植物的水平線段相交處會長出一朵小花(前提是之前沒有長出花朵),如果線段交於端點,是不會長花的。
下圖為示意圖:
給出每天的植物的座標,計算每天長出多少新花。
第一行包含乙個整數n(1<=n<=100000),表示天數。
接下來n行,每行兩個整數l和r(1<=l<=r<=100000),表示植物的左右邊界。
輸出每天長出新植物後增加新花的數量。
一眼就知道這是乙個線段樹啊!!!
和這個模板很像——線段樹
查詢時查乙個區間的端點[x,x]和[y,y]
一定要用格仔線段樹~~~
type
pnode=^tnode;
tnode=record
lc,rc:pnode;
c:longint;
end;
var t:pnode;
i,j,k:longint;
x,y:longint;
n,m:longint;
ans:longint;
a,b:array[1..100010] of longint;
procedure
neww
(var t:pnode);
begin
if t=nil
then
begin
new(t);
t^.c:=0;
t^.lc:=nil;
t^.rc:=nil;
end;
end;
procedure
insert
(var t:pnode; l,r,x,y:longint);
var i,j,k:longint;
mid:longint;
begin
with t^ do
begin
mid:=(l+r) div
2; if (l=x) and (r=y)
then
begin
c:=c+1;
exit;
end;
if (l<=x) and (mid>=y)
then
begin
neww(lc);
insert(lc,l,mid,x,y);
exit;
end;
if (midand (r>=y)
then
begin
neww(rc);
insert(rc,mid+1,r,x,y);
exit;
end;
neww(lc);
neww(rc);
insert(lc,l,mid,x,mid);
insert(rc,mid+1,r,mid+1,y);
end;
end;
procedure
find
(t:pnode;l,r:longint;x,y:longint);
var mid:longint;
begin
if t=nil
then
exit;
with t^ do
begin
ans:=ans+c;
mid:=(l+r) div
2; if (l<=x) and (mid>=y)
then
begin
find(lc,l,mid,x,y);
exit;
end;
if (midand (r>=y)
then
begin
find(rc,mid+1,r,x,y);
exit;
end;
find(lc,l,mid,x,mid);
find(rc,mid+1,r,mid+1,y);
end;
end;
begin
m:=100010;
readln(n);
fillchar(t,sizeof(t),0);
neww(t);
for i:=1
to n do
begin
readln(x,y);
ans:=0;
find(t,1,m,x,x);
j:=ans;
find(t,1,m,y,y);
k:=ans-j;
writeln(ans-a[x]-a[y]);
a[x]:=j+1; a[y]:=k+1;
insert(t,1,m,x,y);
end;
end.
開花 紀中1742 線段樹
description 在遙遠的火星上,上面的植物非常奇怪,都是長方形的,每個植物用三個數來描述 左邊界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個空來安排,每安排乙個子樹剩下的空...