P1047 校門外的樹

2022-04-06 15:03:59 字數 1249 閱讀 5383

這道題可以幫你深入了解懶標記的意義

蒟蒻本來想通過蒟蒻做法做的,就是種樹就在位置+1,砍了-1,然而發現這樣做會砍掉不存在的樹

然而懶標記這個東西,為什麼一定要是加或減呢?標記成這個區間需要修改成什麼也可以呀

一開始的種樹,就相當於把整個區間賦值為1,而砍樹,就相當於把這個區間賦值為0了

這樣用線段樹解決就很明顯了

#include#include

#include

intn,m;

long

long sum[400005], lazy[400005

];int

f,x,y;

long

long

k;void pushdown(int x, int l, int

r)

return;}

void pushup(int

x)void update(int x, int l, int r, int l, int r, long

long

d)

int mid = (l + r) >> 1

; pushdown(x, l, r);

if (l <= mid) update(x << 1

, l, mid, l, r, d);

if (r > mid) update(x << 1 | 1, mid + 1

, r, l, r, d);

pushup(x);

}long

long query(int x, int l, int r, int l, int

r)

int mid = (l + r) >> 1

; pushdown(x, l, r);

long

long ans = 0

;

if (l <= mid) ans += query(x << 1

, l, mid, l, r);

if (r > mid) ans += query(x << 1 | 1, mid + 1

, r, l, r);

return

ans;

}int

main()

for(int i=1;i<=m;++i)

printf(

"%lld\n

", query(1, 0, n, 0

, n));

return0;

}

ac

P1047 校門外的樹

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

P1047 校門外的樹

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

P1047 校門外的樹

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