在OI/ACM中,我們常常會聽到對于區(qū)間修改、區(qū)間查詢等問題的處理時妆兑,大佬們口中說的“離線”,“在線”等名詞毛仪,一開始自然是一臉蒙逼搁嗓。
在線和離線可以簡單的理解為對于所有的操作是否需要讀入完畢。
在線的要求是可以不用先知道所有的操作(類似詢問箱靴、修改)腺逛,邊讀入邊執(zhí)行,類似“走一步衡怀,做一步”的思想屉来。
離線則與在線相反,要求必須知道所有的操作狈癞,類似"記錄所有步,回頭再做”的思想茂契,一般用Query[]記錄所有操作蝶桶。
常見的在線算法:帶有“可持久化”字樣的(主席樹(可持久化線段樹)、可持久化字典樹掉冶、etc)真竖,其實正常寫題時基本上都是在線的思路……
常見的離線算法:整體二分、陳丹琦(CDQ)分治厌小、莫隊算法
對于正常的題目來講恢共,兩種算法其實都可以使用,經(jīng)典的題目如:動態(tài)第K大問題(zoj 2112)璧亚,解法有樹套樹(在線)和整體二分/CDQ分治(離線)讨韭,但是區(qū)別在于:
在線算法的思路相對簡單,而代碼量大(如某些毒瘤題),容易爆棧透硝,賽場上及其考驗心態(tài)(菜逼表示早就炸了)
離線算法的思路相對復(fù)雜狰闪,而代碼量小,建議選手多采用(畢竟代碼越多濒生,debug越困難)
當然對于一些不正常的題目(強制在線)埋泵,只能老老實實碼數(shù)據(jù)結(jié)構(gòu)了,嗯罪治。
強制在線的例子如:當前讀入的數(shù)據(jù)需要xor上一次的結(jié)果丽声、交互式等。