線段樹 校門外的樹

2021-09-10 14:26:22 字數 1304 閱讀 7512

題目描述

校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的……

如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作:

k=1,k=1,讀入l、r表示在區間[l,r]中種上一種樹,每次操作種的樹的種類都不同

k=2,讀入l,r表示詢問l~r之間能見到多少種樹

(l,r>0)

輸入第一行n,m表示道路總長為n,共有m個操作

接下來m行為m個操作

輸出對於每個k=2輸出乙個答案

複製樣例資料

5 4

1 1 3

2 2 5

1 2 4

2 3 5

樣例輸出

1

2

提示

20%的資料保證,n,m<=100

60%的資料保證,n <=1000,m<=50000

100%的資料保證,n,m<=50000

主要是可能有重複的樹,不是取最大。

#include #include #define n 200010

using namespace std;

int sum[n],lazy[n],ex[n];

int n,m;

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

int mid=(l+r)/2;

build(l,mid,rt*2);

build(mid+1,r,rt*2+1);

sum[rt]=sum[rt*2]+sum[rt*2+1];

}void pushdown(int l,int r,int rt)

}void update(int l1,int r1,int l,int r,int rt)

int mid=(l+r)/2;

pushdown(mid-l+1,r-mid,rt);

if(l1<=mid)

if(r1>mid)

if(r1>mid&&l1<=mid)

}int query(int l1,int r1,int l,int r,int rt)

int mid=(r+l)/2;

int ret=0;

pushdown(mid-l+1,r-mid,rt);

if(l1<=mid)

if(r1>mid)

if(r1>mid&&l1<=mid)

return ret;

}int main()

else

}return 0;

}

校門外的樹

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

校門外的樹

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

校門外的樹

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