題目描述
吃雞開局了,你降落的森林中有一條長度為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 ...