題目很簡明 可是 上午反演的時候無計可施。
直接做是nln的 可以簡單轉換一下 原式=\(\sum_^n\fracd(x)\)
這樣就有乙個o(n)的做法了 由於d是積性函式直接篩就好了。沒必要整除分塊 直接o(n).
const int maxn=15000010;
int n,top;
int v[maxn],g[maxn],p[1000010],d[maxn];
inline void prepare()
rep(1,top,j)
^[(x,i)=x]\)這個東西沒啥用 還是很難化簡。
還要乙個 \(d(xy)=\sum_^\sum_^[(i,j)=1]\)
都跟本題沒啥關係。
這道題之所以能做是因為 求的是字首和這個特異性問題。
\(d(w)=\sum_1\) 觀察這個東西可以發現\(x,\frac\)這個東西是乙個二元組。
而\(\sum_^n\sum_d(p)\)觀察這個東西 對於乙個i來說 有\(\frac,d(p)\)即\(\frac,\frac,x\)
這個三元組會對答案貢獻1.
可以發現 對於所有的三元組 xyz<=n 這樣的三元組都會被計數。
且這個三元組是唯一存在於乙個數字i內的。
設x<=y<=z.若x<=\(n^},y\leq \sqrt(\frac)\)
列舉x,y統計z的數量即可。
由於x,y,z可以是乙個排列所以要乘6.
但是觀察上面的三元組的情況 發現對於x==y的時候這種情況是沒有排列的所以需要減掉相應的次數 三個數字相等也同理。
非常妙的一道題。至於複雜度接近於\(n^}\)(我也不會證明。
const ll maxn=100010;
ll n;
int main()
ll cnt=0;
for(ll i=1;i<=w2;++i)cnt+=n/i/i;
putl(ans*6-cnt*3-2*w1);
return 0;
}
藍橋杯省賽之遞增三元組
給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請您統計有多少個三元組 i,j,k 滿足 1.1 i,j,k n 2.ai 輸入格式 第一行包含乙個整數n 第二行包含 個整數a1,a2,an。第三行包含 個整數b1,b2,bn。第四行包含 個整數c1,c2,cn。...
第九屆藍橋杯省賽C B組 遞增三元組
給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1 i,j,k n ai輸入格式 第一行包含乙個整數 n。第二行包含 n 個整數 a1,a2,an。第三行包含 n 個整數 b1,b2,bn。第四行包含 n 個整數 c1,c...
2023年第九屆藍橋杯省賽 遞增三元組
給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1.1 i,j,k n 2.ai bj ck 輸入格式 第一行包含乙個整數n。第二行包含n個整數a1,a2,an。第三行包含n個整數b1,b2,bn。第四行包含n個整數c1,...