問題B 絕地求生 珂朵莉樹

2022-04-08 15:18:49 字數 1883 閱讀 2851

題目描述

吃雞開局了,你降落的森林中有一條長度為s的小路(編號從1到s),且在小路上時常會起霧,你手上的雷射發射器可以讓霧消散。

你肯定你所在位置的視野。若位置x有濃霧,則位置x的視野為0。若從x一直到s或從x一直到1全都沒有濃霧,則視野為inf。其他情況下,位置x的視野定義為max,其中l,r滿足:,x0格仔沒有濃霧。

具體來說,會有以下事件發生:

1、「1 l r」小路的[l,r]部分產生了濃霧;

2、「2 l r」小路的[l,r]部分濃霧散去了;

3、「3 x」查詢x點的視野。

一開始,小路上沒有任何濃霧。

輸入第一行乙個整數,為小路的長度s。

第二行乙個整數,為事件數q。

接下來q行,每行乙個事件,格式如題目描述。

輸出對於每乙個詢問事件,輸出乙個整數或一行字串「inf」,代表所求視野。

樣例輸入

複製樣例資料55

1 2 4

3 13 4

2 3 3

3 3樣例輸出

inf01提示

對於 40%的資料,sq <= 510^7。

對於 100%的資料,2≤s≤100,000,2≤q≤200,000,1≤l≤r≤s,1≤x≤s。

這個題目用線段樹不會寫, 網上的題解看的也迷迷糊糊的,忽然發現乙個很很牛逼又很玄學的做法

珂朵莉樹

#include 

#include

#include

#include

#include

using namespace std;

typedef long

long ll ;

const

int n =

1e5+

10, mod =

1e9+7;

struct node};

int n , q , ans , op , l , r , x , y ;

sett ;

typedef set

::iterator it ;

it split

(int pos));

if(it != t.

end(

)&& it-

>l == pos)

return it ;

-- it ;

int l = it-

>l , r = it-

>r ;

ll val = it-

>val ;

t.erase

(it)

, t.

insert()

;return t.

insert()

.first ;

}void

assign

(int l ,

int r ,

int val));

}void

query

(int x)

int l =

1, r = n ;

for(it i = pos ;

;i --)if

(i == t.

begin()

)break;}

for(it i = pos ;i != t.

end(

);i ++)}

if(l ==

1|| r == n)

else

printf

("%d\n"

, r - l +1)

;}intmain()

);while

(q --

)else

if(op ==2)

else

}return0;

}

珂朵莉樹學習筆記

珂朵莉樹是一種基於 set 的暴力資料結構,真的很好懂 因為暴力鴨 又叫 old driver tree 老司機樹 適用於區間賦值,資料隨機.首先來講講它的思想,它把區間 1,n 分成若干個 l i,r i l i,r i 內的數都一樣,為 w i 舉栗子 區間 1,5 的初值為 1 現在只有乙個區...

校門外的樹 珂朵莉樹

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

CodeForces 896C 珂朵莉樹

傳送門 用set搞的比較神奇的樹吧,玄學時間複雜度,簡潔好寫,無聊學了用來水題再好不過了 include include include include include include include include include include include include define x ...