Vijos 1448 校門外的樹 樹狀陣列

2021-08-09 06:52:57 字數 1128 閱讀 4733

描述

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

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

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輸出乙個答案

樣例1樣例輸入1

5 4

1 1 3

2 2 5

1 2 4

2 3 5

copy

樣例輸出1

1 2

copy

限制1s

提示dejiyu@csc workgroup

相當與給你一大堆線段,問給你的區間與多少線段有交點

於是有了一種十分魔性的方法:括號法

假設有乙個長度為10的數軸,我們要將區間[ 2 , 5 ]中種樹,這時,我們將 2 處放乙個左括號 」 ( 」 ,5處放乙個 」 )」 ,表示區間 [ 2 , 5 ]種了樹。

查詢某個區間樹的種類,如區間[ 3 , 10],只需統計10之前(包括10)有多少個『(』,統計3之前有多少個『)』,(不包括3)。

然後維護乙個樹狀陣列就ok了

#include 

#include

#include

#include

#define n 100005

using

namespace

std;

int n,m;

int h[n];

int t[n];

inline

int lowbit(int x)

inline

void add(int a,int k)

inline

int sum(int a,int k)

int main()

else

}return

0;}

Vijos1448校門外的樹 題解

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

vijos1448 樹狀陣列 校門外的樹

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

Vijos1448 校門外的樹 樹狀陣列

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