種樹與砍樹

2021-10-05 06:43:20 字數 1064 閱讀 5615

小科的學校門口有一條筆直的馬路,可以把馬路看做是乙個長度為l的直線,馬路上有很多用來種樹的樹坑,編號依次為0到l,每一編號的位置上都有1棵楊樹,春天楊絮滿天飛,非常不利於健康,所以學校要把門口的楊樹都換掉,工作人員中有的人負責砍樹有的人負責種樹。砍樹用「0 a b表示」,意思是砍樹者每次從編號a到編號b處(包含a和b)連續砍掉每一棵樹,就連樹苗也不放過;種樹用「1 c d」表示,意思是種樹者每次從編號c到編號d(包含c和d)中凡是空穴(樹被砍且還沒種上樹苗或樹苗又被砍掉)的地方都補種上樹苗;由於工作人員比較多,有的人種樹有的人砍樹,難免會出差錯,有一些砍樹者一不小心就把剛剛種上的樹苗又砍掉了。

小科是個好奇的小朋友,他想知道最終校門外留下的樹苗有多少棵?植樹者種上又被砍掉的樹苗有多少棵?請你幫忙計算一下吧。

輸入格式

一共n+1行:

第一行,兩個整數l和n,表示校門外原來有l+1棵樹,並有n次砍樹或種樹的操作。

以下n行,每行3個整數c b e,用來描述一次砍樹或植樹操作

如果c為1表示從編號b到編號e所有空穴的地方都種上樹苗

如果c為0表示從編號b到編號e連續砍掉每乙個棵樹 (包含樹苗)

輸出格式

共兩行:

第一行乙個整數,表示馬路上最終留下的樹苗的數目

第二行乙個整數,表示在砍樹和植樹過程中種上又被砍掉的樹苗的數目

輸入輸出樣列

輸入樣例1:

10 3

0 2 6

1 1 8

0 5 7

輸出樣例1:32

#include

using

namespace std;

const

int l=

10010

;int tree[l]

;int

main()

int f,left,right;

for(

int i=

1;i<=n;i++)}

}for

(int i=

0;i<=l;i++

) cout

}

完成(^-^)v

砍樹最小花費

題意 有n種樹,每種樹給出高度h,砍掉每顆樹的花費c,每種樹的數量p,現在要砍掉一些樹,使得最高的樹的數量超過所有樹的一半,問最小花費。不同種類的樹高度可能相同 題解 列舉不同的高度,把高於它的樹都砍掉,然後比它矮的樹挑便宜的砍,使得該高度的樹佔所有樹的1 2 1。給樹按高度排序,首先可以用字尾和預...

二分答案 砍樹

題目傳送門 題目描述 伐木工人公尺爾科需要砍倒m公尺長的木材。這是乙個對公尺爾科來說很容易的工作,因為他有乙個漂亮的新伐木機,可以像野火一樣砍倒森林。不過,公尺爾科只被允許砍倒單行樹木。公尺爾科的伐木機工作過程如下 公尺爾科設定乙個高度引數h 公尺 伐木機公升起乙個巨大的鋸片到高度h,並鋸掉所有的樹...

LG 砍樹 二分

伐木工人公尺爾科需要砍倒m公尺長的木材。這是乙個對公尺爾科來說很容易的工作,因為他有乙個漂亮的新伐木機,可以像野火一樣砍倒森林。不過,公尺爾科只被允許砍倒單行樹木。公尺爾科的伐木機工作過程如下 公尺爾科設定乙個高度引數h 公尺 伐木機公升起乙個巨大的鋸片到高度h,並鋸掉所有的樹比h高的部分 當然,樹...