題目描述
校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的……
如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作:
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,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知...