2020牛客多校第七場H

2021-10-08 19:58:05 字數 679 閱讀 3132

題目鏈結

任何(1,k)是有效答案。

如果(n,k)是有效答案,那麼(n+k,k)和(n*k,k)都是有效答案。

給出t組,n和k(範圍1~1e12),求出(n,k)在n<=n,k<=k範圍內的有效個數。

在k不變的情況下,n的取值範圍只可能是k的倍數,或者k的倍數+1,可以o(1)算出當前k對應的答案個數。即 1 + n / k + n - 1 / k

因為n = 1 或者 k = 1的時候比較特殊,可以把這兩種情況單獨算到答案中。

n = 1 或 k = 1時的答案 n + k - 1

所以在n取2到n,k取2到k的時候的答案sum(n / k + n - 1 / k),k取2到k。

用到了數論分塊的知識

隊裡數論抓瞎,沒見過板子,三個小時硬是沒寫出來。

模板

#include

using

namespace std;

const

long

long mod =

1e9+7;

long

long ans;

void

find

(long

long n,

long

long k)

}int

main()

2020牛客多校第七場H Dividing

正整數二元組 legend tuple n,k 是這樣定義的 統計有多少個 legend tuple n,k 滿足 1 n n,1 k k,其中 n 和 k 是不超過 10 12 的整數 可以很容易發現答案即為n k 0,或者 n 1 k 0的對數 對於一部分k,n k是相等的,所以可以直接整除分塊...

2020牛客暑假多校第七場補題

題目大意是說對於一棵樹,初始所有點的權值 f x f x f x 為0,有三種操作 對於結點 x xx,給定乙個值 w ww,然後對於樹上所有結點 y yy,權值加上 w d ist x,y w dist x,y w dist x,y 包括本身 對於結點 x,f x min x,0 x,f x mi...

牛客多校第七場E Find the median

題意 每次在乙個空區間內加入 l,r 區間內所有的數,然後問每次加入後的中位數是什麼。題解 一道線段樹的題目。a 線段樹的葉子節點維護了乙個區間,這個區間是 l,r 1 為什麼是這區間?因為這樣能不重不漏的包含所有的區間,每次查詢的時候也不會漏掉,自己畫一顆線段樹基本能明白了 b 然後查詢的時候,記...