我又來啦

鄭允臻

Sprout

要怎麼考資訊之芽?

Coding test

不太需要演算法知識

但靈活且有時有相當實做量

TLE & MLE

遇到非WA的verdict怎麼辦?
  • 有時候RE&MLE是同一個
  • 檢查複雜度
  • 確認code跟自己想要的一致
  • 壓常數
  • 換寫法!
  • wiwi : wassert()

TO DOs

不要被verdict侷限

Range query

有趣的區間問題s
  • BIT
  • Segment tree
  • Treap
  • Sparse table
  • Sqrt - decomposition
  • Mo's algorithm
  • and more...

Tools to use

Classic

區間元素種類

https://www.spoj.com/problems/XXXXXXXX/

  • 離線處理問題
  • 把資料「排序」減少一個維度
  • 本題:
    • 把詢問按照右界排序
    • 每次維護以目前的位置r為右界
    • 左界在i的答案
  • 巧思:維護目前最晚出現的val_i在哪裡

Offline strategy

SQRT decomposition

找[L,R]間第K小的數字

1<=N<=100000

1 <= a_i <= 100000

1 <= Q <= 100000

https://codeforces.com/gym/101161 pE

  • https://cp.wiwiho.me/mo-algorithm/
  • 區間詢問根號算法
  • 把詢問[l, r]排序
    • 把左界每k長度分一段
    • 先按左界的塊排序(first key)
    • 再按右界排序(second key)
  • 時間複雜度O(n sqrt(q))
  • 樹莫隊

Mo's algorithm

  • Goal : O(1) update, O(sqrt(C)) query
  • 找出第K大的數字是誰?
  • 思考
    • 暴力的作法?
    • 可以縮小暴力搜尋的範圍嗎?

值域分塊

Adhoc

問[L,R]是否每個數都出現偶數次

(線性作法)

  • 如果所有東西都出現偶數次會怎樣?
  • 隨機大法!
  • 區間絕對眾數

Random

Thank You!

Questions?

Made with Slides.com