題解 校門外的樹(字首和,差分)

2021-10-06 07:33:51 字數 1230 閱讀 7752

方法一:

假設每個點的樹為1,將區間中的樹減一,使其小於1

#include

#include

#include

#include

#include

using

namespace std;

int check[

10001];

intmain()

for(

int i =

0;iint ans =0;

for(

int i =

0;i<=l;i++

) cout << ans << endl;

return0;

}

方法二:

利用字首和計算。初始化全部的樹為0,標記左端點和右端點,左端點加一,右端點的後一位樹減一,再記錄全部樹的值,如果為0代表沒有被移走。

#include

#include

#include

#include

#include

using

namespace std;

intmain()

,mov[

10001]=

;int a,b;

for(

int i =

0;i) tree[0]

= mov[0]

;//(0+mov[0])

for(

int i =

1;i<=l;i++

)int ans =0;

for(

int i =

0;i<=l;i++)}

cout << ans << endl;

return0;

}

其中

tree[0]

= mov[0]

;//(0+mov[0])

for(

int i =

1;i<=l;i++

)int ans =0;

for(

int i =

0;i<=l;i++

)}

可以改進為

int ans =

0,sum =0;

for(

int i =

0;i<=l;i++

)

校門外的樹(差分 字首和)

某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止...

校門外的樹(差分)

鏈結 題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區...

校門外的樹(差分)

題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起...