牛客网【每日一题】4月30日题目精讲 换个角度思考
鏈接:
文章目錄
- 題目描述
- 題解:
- 主席樹做法:
- 代碼:
- 樹狀數(shù)組:
- 更扯淡的方法!!!
題目描述
輸入描述:
第一行兩個整數(shù)n,m 第二行n個整數(shù)表示序列a的元素,序列下標從1開始標號,保證1 ≤ ai ≤ 105
之后有m行,每行三個整數(shù)(l,r,k),保證1 ≤ l ≤ r ≤ n,且1 ≤ k ≤ 105
輸出描述:
對于每一個詢問,輸出一個整數(shù)表示答案后回車
示例1
輸入
輸出
3備注:
數(shù)據(jù)范圍
1 ≤ n ≤ 105
1 ≤ m ≤ 105
題解:
主席樹,樹狀數(shù)組等都可以做
主席樹做法:
簡單提一句主席樹
主席樹的本體其實是線段樹,也就是很多棵線段樹,用以存一段數(shù)字區(qū)間出現(xiàn)次數(shù),主席樹經(jīng)常用于求一個序列內(nèi)的第 k 小
在這里,主席樹就是提前預(yù)處理好每個點的權(quán)值線段樹,查詢時,可以直接用r時刻前綴小于x的數(shù)量減去l-1的數(shù)量,剩下的就是[l,r]區(qū)間值
也就是[L,R]=[1,R]-[1,L-1],查詢后兩者相減即可
代碼:
樹狀數(shù)組:
首先需要離線操作,我們每次查詢都是要知道左右區(qū)間以及x,相當(dāng)于同時有兩個東西未知需要操作。通過離散后,我們可以控制其中一部分,另外一部分未知變化,例如:第一種我們查詢[l,r]內(nèi)有多少數(shù)滿足條件,我們就要保證所有數(shù)都小于x;第二種如何問有多少數(shù)小于等于x,就保證范圍取定于[l,r]。這樣更高效,當(dāng)然占空間更多。
簡單的說:
離線操作:讀入所有的操作數(shù)據(jù),然后一次性處理。
在線操作:每讀入一個操作數(shù)據(jù),就進行一次操作。
第一種:
我們在保證所有數(shù)都是小于等于x的情況下來查詢[l,r]有多少個數(shù)
每次詢問[l,r,x]之前,把小于等于x的ai都加入加入到一個另外的位置上,這樣里面存放的都是滿足條件的數(shù),直接詢問即可
第二種:
保證所有數(shù)都在[l,r]區(qū)間的情況下,查詢小于等于x的數(shù)量
我們可以在離線時,將[l,r]區(qū)間問題轉(zhuǎn)化成 [ 1 , l-1 ] , [ 1 , r ] 兩個區(qū)間,這樣就可以用樹狀數(shù)組來解決
(這是鄧老師的講解,我加入自己的理解寫出來的)
代碼寫完再更
更扯淡的方法!!!
這題貌似優(yōu)化暴力就能過。。。
就是直接模擬,不知為啥過了。。快讀都還沒用上
總結(jié)
以上是生活随笔為你收集整理的牛客网【每日一题】4月30日题目精讲 换个角度思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 塔塔集团收购纬创资通!成为iPhone首
- 下一篇: 牛客网【每日一题】5月1日题目 [SCO