开花 (Standard IO)
生活随笔
收集整理的這篇文章主要介紹了
开花 (Standard IO)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意/Description:
? ? ? ?在遙遠的火星上,上面的植物非常奇怪,都是長方形的,每個植物用三個數來描述:左邊界L、右邊界R以及高度H,如下圖所示描述一個植物:L=2,R=5和H=4。
? ? ? ?每天都有一個新植物長出來,第一天的植物高度為1,后面每天長出的植物比前一天的高1。
當一個新植物長出來的時候,跟其他植物的水平線段相交處會長出一朵小花(前提是之前沒有長出花朵),如果線段交于端點,是不會長花的。
下圖為樣例1的示意圖:
? ? ? ?給出每天的植物的坐標,計算每天長出多少新花。
?
讀入/Input:
? ? ? ?第一行包含一個整數N(1<=N<=100000),表示天數。
接下來N行,每行兩個整數L和R(1<=L<=R<=100000),表示植物的左右邊界。
?
輸出/Output:
? ? ? ?輸出每天長出新植物后增加新花的數量。
?
題解/solution:
就是個線段樹。請看:
http://blog.csdn.net/a_loud_name/article/details/51910169
?
代碼/Code:
?
typearr=recordl,r,cover:longint;end; vartree:array [0..800001] of arr;a:array [0..100001] of longint;n,ans:longint; procedure cre(p,x,y:Longint); varmid:longint; beginwith tree[p] dobeginl:=x; r:=y;if y=x then exit;mid:=(x+y) div 2;cre(p*2,x,mid);cre(p*2+1,mid+1,y);end; end;procedure count(p,x,y:longint); varmid:longint; beginwith tree[p] dobeginans:=ans+cover;mid:=(l+r) div 2;if (l=x) and (r=y) then exit;if y<=mid then count(p*2,x,y) elseif x>=mid+1 then count(p*2+1,x,y) elsebegincount(p*2+1,x,mid);count(p*2+1,mid+1,y);end;end; end;procedure ins(p,x,y:longint); varmid:longint; beginwith tree[p] dobeginmid:=(l+r)div 2;if (x=l) and (y=r) thenbegininc(cover);exit;end;if (y<=mid) then ins(p*2,x,y) elseif (x>=mid+1) then ins(p*2+1,x,y) elsebeginins(p*2,x,mid);ins(p*2+1,mid+1,y);end;end; end;procedure init; vari,x,y,t,k:longint; beginreadln(n);cre(1,1,100001);for i:=1 to n dobeginreadln(x,y);ans:=0;count(1,x,x);t:=ans;count(1,y,y);k:=ans-t;writeln(ans-a[x]-a[y]);a[x]:=t+1;a[y]:=k+1;ins(1,x,y);end; end;begininit; end.?
轉載于:https://www.cnblogs.com/zyx-crying/p/9319647.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的开花 (Standard IO)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Entity Framework查询,E
- 下一篇: 27.怎样在Swift中声明typede