方法一:
假設每個點的樹為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,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起...