EOJ 262 潤清的煩惱

2022-02-06 01:54:26 字數 1523 閱讀 4949

——題目出處zhoutb2333

題解:3e6可以帶乙個log

又是下取整問題。但是分塊會tle。

這樣考慮,我們把式子拆成兩個部分。

我們先算出來每乙個x的[ai/x]項,再算出來[x/ai]項。之後做和。

[x/ai]:

x和ai的倍數有一些關係。

發現,假設現在x|ai,且x/ai=k, 那麼,對於任意的(x~x+ai-1)[x/ai]=k;

所以,我們可以反過來,對於每乙個ai,列舉ai的倍數,在ai的每個倍數的位置上++,這個桶叫val

那麼,乙個x,[x/ai]的值,就是val[1~x]的和!即乙個字首和。

所以我們外層迴圈i,給ai的倍數打標記 。

但是會被卡,ai=1時,複雜度m^2

所以給ai再開乙個桶,cnt[i]表示值為i的ai有多少個。

列舉i的倍數即可,每次val+=cnt[i],一次加了許多個。

複雜度:m*(1/1+1/2+1/3+...1/m)= mlogm

另外一部分:

[ai/x]

ai和x的倍數有一些關係。

這次就考慮外層列舉x,思路和上面差不多。

列舉x的每乙個倍數j,k=j/x,

那麼,對於數值在(k*x,k*x+x-1)的區間內的所有的ai,[ai/x]=k

把剛才那個桶cnt,進行乙個字首和。

所以,對於這個x,每個倍數j的貢獻是:(sum(k*x+x-1)-sum(k*x-1))*k

複雜度同上。

然後兩邊做和就可以了。

注意:腦殘的一點:n大於2e5的手動構造,mod m再加1,不是mod(m+1)

顯然啊,ai數值不能是(0,m)的,而是(1,m)

**:

#includeusing

namespace

std;

typedef

long

long

ll;const

int n=3000000+4

;ll n,m;

ll a[n];

ll cnt[n],tot;

ll val[n];

ll lp[n];

ll s[n];

intmain()

}else

}for(int i=1;i<=m;i++)

}//for(int i=1;i<=m;i++)

for(int i=1;i<=m;i++)

}ll ans=0

;

for(int i=1;i<=m;i++)

printf(

"%lld

",ans);

return0;

}

JavaScript ECMA 262 深入解析

今天看到一位js大俠的bolg ecma 262大家應該都不陌生吧,陌生就看這裡 ecmascript language specification 要學好js,深入理解ecma 262肯定是必經之路,那麼如何深入理解ecma 262就是乙個要嚴肅對待的問題,狠功夫肯定是要下的,但是也有一些好的資源...

EOJ 莫干山奇遇

出題人當然是希望出的題目有關oxx,於是想方設法給題目配上一些有關oxx的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得oxx顯得非常可憐。所以出題人刪除了故事,只留下乙個枯燥乏味的數學問題。故事已刪除 給乙個長度為n的序列a1,a2,an,求乙個長度為m的序列b1,b2,...

2 6 2 IPSec的實現方式

ipsec的乙個特點就是它可以在共享網路訪問裝置,甚至可以在所有的主機和伺服器上完全實現,這避免了公升級網路裝置的相關費用。ipsec支援2種模式 傳輸模式和隧道模式。傳輸模式 通常在ipsec在一台主機 客戶機或伺服器 上實現時使用,傳輸模式使用原始明文ip頭,並且只加密資料 包括tcp或udp頭...