1. 程式人生 > >bzoj3585 mex 分塊+莫隊演算法

bzoj3585 mex 分塊+莫隊演算法

題意:一個序列,多組詢問,求區間最小沒出現過的自然數。(n,m<=100000)
許可權題囧
就不敲程式碼了吧,或者有時間再敲?
orz popoqqq 真是太神了
題解:首先考慮詢問只有一次怎麼做。按權值分塊。例如:
1 2 3 | 4 5 6 | 7 8 9
block1|block2 | block3
每塊內記錄每塊內有多少權值出現過(ans1),並記錄每個權值出現次數(ans2)。
回答時看每塊 ans1==block.size 是否為真,如果為真,代表這塊裡的每個值都出現過,走下一塊。如果為假,那麼這塊裡有沒出現過的,暴力在塊內從左到右找判斷 ans2==0 的真假
複雜度O(sqrt(n))
如果多次詢問呢?莫隊演算法修改ans1 ans2即可。
所以這道題複雜度O(msqrt(n)+msqrt(n))。