Vijos1448 校門外的樹 樹狀陣列

2022-04-30 09:33:11 字數 1307 閱讀 6168

題目傳送門

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

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

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

1s

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

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

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

dejiyu@csc workgroup

分析:最大區間覆蓋的模板題。

如果是區間修改和單點查詢,那麼我們在修改的時候只要$update(l,1),update(r+1,-1)$就行了,也就是說先從$l$開始$+1$,再從$r+1$開始$-1$,也就保證了只有$[l,r]$被修改。但這題是區間修改與區間查詢,因此我們採用開兩個樹狀陣列的方法,乙個記錄$l$的修改,乙個記錄$r$的修改。

code:

//

it is made by holselee on 3rd sep 2018

//vijos 1448

#includeusing

namespace

std;

const

int n=5e4+7

;int

n,m,c[n],b[n];

inline

intread()

while( ch>='

0' && ch<='9'

)

return flag ? -num : num;

}inline

int lowbit(int

x)inline

void update1(int

x) inline

void update2(int

x)inline

int quary1(int

x)inline

int quary2(int

x)int

main()

else

}return0;

}

Vijos1448校門外的樹 題解

vijos1448校門外的樹 題解 描述 校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 k 1,k 1,讀入l r表示在區間 l,r 中種上一種樹,每次操作種的樹的種類都不同 k 2,讀入l,r表示詢問l r之間能見到多少種樹 l,r 0 輸入格式 第一行n,m表示道路總長為...

Vijos 1448 校門外的樹 樹狀陣列

描述 校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作 k 1,k 1,讀入l r表示在區間 l,r 中種上一種樹,每次操作種的樹的種類都不同 k 2,讀入l,r表示詢問l r之間能見到...

vijos1448 樹狀陣列 校門外的樹

傳送門biu 對於某一區間 l,r 來說,所有線段中左端點小於r的線段數的是 1,r 的答案,在這部分答案中,右端點在l左側的應該捨去,所以我們可以維護兩個樹狀陣列,乙個存左端點出現次數,乙個存右端點出現次數。include using namespace std int n,m,a 50001 b...