題解 P1047 校門外的樹

2022-05-02 04:30:08 字數 1439 閱讀 9576

我們可以通過for迴圈來實現操作,用乙個陣列來記錄是否有樹。當修改時,巢狀乙個for迴圈可以把這一部分標記下。

**如下:

#include using namespace std;

int main()

for(int j=0;j<=c-1;j++)

}for(int l=0;l<=b;l++)

cout《這麼簡單,一定是線段樹

很簡單,我們建一棵區間修改區間查詢的線段樹,然後,,,就操作就可以了。

不會線段樹的可以去這裡和這裡學

#include#include#include#include#include#include#include#includeusing namespace std;

#define go(i,j,n,k) for(int i=j;i<=n;i+=k)

#define fo(i,j,n,k) for(int i=j;i>=n;i-=k)

#define rep(i,x) for(int i=h[x];i;i=e[i].nxt)

#define mn 100010

#define inf 2147483637

#define ll long long

//#define local

#define debug(...) fprintf(stderr, __va_args__)

#define root 0,n,1

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define bson l,r,rt

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}ll z[mn<<2],col[mn<<2];

inline void update(int rt)

inline void color(int l,int r,int rt,ll v)

inline void push_col(int l,int r,int rt)

}inline void build(int l,int r,int rt)

int m=(l+r)>>1;

build(lson);

build(rson);

update(rt);

}inline void modify(int l,int r,int rt,int nowl,int nowr,ll v)

int m=(l+r)>>1;

push_col(bson);

if(nowl<=m) modify(lson,nowl,nowr,v);

if(m>1;

push_col(bson);

if(nowl<=m){

if(m第12次發題解,希望可以兼顧所有的選手

P1047 校門外的樹 題解

題目鏈結 這個題比較簡單,怎麼做都行,但是看洛谷後面題解感覺還是有點複雜了,所以隨手寫一寫題解。題目描述 某校大門外長度為 l 的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是 11 公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸 0 的位置,另一端在 l 的位置 數軸上的每個整數點,即 0,1,...

P1047 校門外的樹

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

P1047 校門外的樹

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