C Floor and Mod 分塊整除

2021-10-19 12:23:54 字數 749 閱讀 7226

題目

a/b=i, a%b=i -> a=i*(b+1),(對於乙個b可以配出幾個i就可以產生幾個貢獻)可以知道對於給出的x,y 取任意1<=b<=y,乙個b產生的貢獻為min(x/(b+1),b-1)

當x>=(b+1)(b-1)時對於此時的b的貢獻全取b-1

當x<(b+1)(b-1)時按x/(b+1)的貢獻,此時用整除分塊求解

另注意下範圍,細節見**

code:

#include

#include

#define fast ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

using

namespace std;

typedef

long

long ll;

intmain()

ans +

=(r - l +1)

*(a /

(l));}

ll k =

min(

(double

)b-1

,max

(2.0

,ceil

(sqrt((

double

)a -

1.0)))

-1-1

);ans +=(

1+ k)

* k /2;

cout << ans << endl;

}}

整除分塊(數論分塊)

乙個有 趣的問題 求 sum n lfloor frac ni rfloor n leq 10 顯然不能直接做廢話 經過一番冷靜推理暴力打表 我們發現以下性質 1.large lfloor frac ni rfloor 最多只有 2 sqrt 種取值 證明 對於 i le sqrt,只有 sqrt ...

分塊 分塊練習三題

分塊嘛 馮巨道德午餐講過的 唯一不同的是可能需要st n ed n 來記錄一下範圍 例教主的魔法 板 include using namespace std define in read int in const int n 1e6 5 int n,q,a n b n add n int siz,m...

分塊3 6279 數列分塊入門 3

題目描述 給出乙個長為 nn 的數列,以及 nn 個操作,操作涉及區間加法,詢問區間內小於某個值 xx 的前驅 比其小的最大元素 輸入格式 第一行輸入乙個數字 nn。第二行輸入 nn 個數字,第 ii 個數字為 a iai 以空格隔開。接下來輸入 nn 行詢問,每行輸入四個數字 mathrmopt ...