假設N(N < = 100000)個元素爲a1,a2,...,an的數組,並給出您在其中的範圍L,R其中1 < = L < = R < = N,您需要獲得給定範圍內的值的數量,該值可以由給定的集合S中的至少一個數字整除,該集合可以是{1,2,...,10}的任何子集。必須使用快速方式,因爲它可能會要求您提供多個範圍和多個S(許多查詢Q,Q < = 100000),因此每次循環值都會非常緩慢。找到給定範圍內的交叉點?
我想在每個N元素的10個數組的10個數組中存儲可由每個數字整除的大數集{1,2,...,10}的值的數量,並且做累計和以獲得可除數的值的數量在O(1)時間內的任何範圍內的任何特定數字,例如,如果它需要得到可被下列至少一項整除的值的數目:2,3,5,那麼我加上可被每一個整除的值的數目他們然後刪除交叉點,但我沒有正確計算出如何計算每次沒有2^10或2^9計算的交點,這也將非常緩慢(並且可能非常耗費內存),因爲它可能會完成100000次時間,任何想法?
這看起來像是來自編程競賽,你可以給源代碼鏈接嗎? –
這是一個seg-tree問題。你可以檢查[這些](http://stackoverflow.com/questions/tagged/segment-tree),或閱讀關於結構和算法[這裏](http://codeforces.com/blog/entry/15890) –