gym101102J Divisible Numbers(預處理)

題意:spa

給你一個n(1e5)q(1e5)表示n個數的數列,q個詢問,每次詢問給你l(n),r(n),s(1023),code

s表示一個二進制數列,當前位爲1表示對應的這個位上的數出現,好比5表示101,即1和3出現,blog

l,r表示一段區間,這段區間中的每一個數,只要能整除出現的數中的任意一個,就會對答案有1的貢獻。class

問每一個詢問的貢獻。二進制

思路:查詢

因爲出現了1就確定每一個數都有貢獻(都是1的倍數),而後就能夠少一位,用512表示9位出不出現的全部狀況,di

用n*512的複雜度預處理全部的狀況,O(1)查詢。co

for(int j=2;j<=10;j++)
    if(x%j==0) s=s|(1<<(j-2));
for(int j=0;j<512;j++)
    sum[j][i]=sum[j][i-1]+((s&j)?1:0);
相關文章
相關標籤/搜索