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