這道題可以幫你深入了解懶標記的意義
蒟蒻本來想通過蒟蒻做法做的,就是種樹就在位置+1,砍了-1,然而發現這樣做會砍掉不存在的樹
然而懶標記這個東西,為什麼一定要是加或減呢?標記成這個區間需要修改成什麼也可以呀
一開始的種樹,就相當於把整個區間賦值為1,而砍樹,就相當於把這個區間賦值為0了
這樣用線段樹解決就很明顯了
#include#includeac#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;
}
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,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起...