題目大意:
給你乙個長度為n
nn的序列,q
qq次詢問。每次詢問乙個區間[l,
r]
[l,r]
[l,r
]**現次數超過 r−l
+1
t\frac
tr−l+1
的最大值.
n ,q
≤1e5
,t≤20
n,q \leq 1e5,t\leq20
n,q≤1e
5,t≤
20題目思路:
核心思路:主席樹+搜尋.
主席樹可以獲取乙個區間的值域資訊。在搜尋時,我們優先往右走。如果右邊的數的總數 ≥r−
l+1t
\geq \frac
≥tr−l+
1複雜度分析:
可能會覺得搜尋時間複雜度會很大。但是觀察到t
tt很小。考慮乙個最差情況:
當我們搜尋到葉子節點的時候,代表著這個值出現了超過r−l
+1
t\frac
tr−l+1
次。那最壞情況就是,每次搜到快到葉子節點時,然後查詢失敗了.
這樣,我們可以近似看成搜尋 t
tt條鏈.單次詢問複雜度為:o(t
logn
)o(tlogn)
o(tlog
n)總時間複雜度:o(q
tlog
n)
o(qtlogn)
o(qtlo
gn) 可以過。
ac**:
#include
using
namespace std;
#define mid ((l + r) >> 1)
const
int maxn =
1e5+5;
int a[maxn]
;int sum[maxn <<5]
, ls[maxn <<5]
, rs[maxn <<5]
, rt[maxn]
, cnt;
int add (
int l ,
int r ,
int t ,
int p ,
int c)
int ask (
int u ,
int v ,
int l ,
int r ,
int k)
if(sum[ls[v]
]- sum[ls[u]
]>= k)
return-1
;}int dist[maxn]
, tot;
intmain()
return0;
}
2020 計蒜之道 線上決賽 C 攀登山峰
乙個序列 a i 每次詢問 l,r,t 表示詢問 l,r 內出現了大於 frac 次的最大的數是什麼。n le 10 5 感覺這題之前cf見過,直接搬那題的做法。tle。事實證明這題正解比cf那題高到不知道 去了。維護權值線段樹,建主席樹,表示一段字首中每個樹各自的出現次數。線段樹上維護和。查詢的時...
計蒜客 項鍊 (主席樹 離線 樹狀陣列)
題目大意就跟洛谷的hh項鍊一樣,但是求一串區間內不重複數字的和。一種做法是離線 樹狀陣列,這裡不講。主要講一下新學習的技能,用主席樹搞區間內不重複的數字 個數或者和 由於洛谷那個寫炸了,一直mle 不知道被什麼資料卡了 只好拿計蒜客上面的題來試一下,結果計蒜客的能過。主席樹做法和樹狀陣列相同,對於同...
計蒜客 泥塑課C
描述 小公尺是乙個幼兒園老師,每學期的泥塑課上,她都會給每個學生發不超過 250 立方厘公尺的等量橡皮泥,教大家做泥塑。在上課過程中,她發現每個班都恰好有乙個小朋友會去搶另乙個小朋友的橡皮泥,於是她決定,在正式開始做泥塑前,讓大家把手裡的橡皮泥都捏成乙個立方體,並且測量手裡捏好的橡皮泥的長 寬和高。...