spring boot 整合minIo
阿新 • • 發佈:2022-05-16
a.位運算
1.快速冪
ll qmi(int m, int k, int p)
{
ll res = 1 % p, t = m;
while (k)
{
if (k&1) res = res * t % p;
t = t * t % p;
k >>= 1;
}
return res;
}
b.字首和與差分
1.一維字首和
a陣列:1 2 3 4 5 6
b陣列:1 3 6 10 15 21
\(b[i] = a[i] + b[i - 1] (下標從1開始)\)
求1,2的和,就可以轉換為\(b[2] - b[1 - 1]\)
2.二維字首和
通過一維字首和我們自然也可以推出二維字首和
\(s[x2][y2] - s[x2][y1 - 1] - s[x1 - 1][y2] + s[x1 - 1][y1 - 1]\)為從(x1,y1)到(x2,y2)二維陣列內的元素之和
例如
圖片s(x2,y2)為從(0,0)到此的總和,s(x1,y1)為從(0,0)到此的和。我們在如果要算(x1,y1)到(x2,y2)的之間元素的總和,我們需要把s(x2,y2)減去s(x2,y1)以及s(x1,y2)
然後還要加上s(x1,y1),因為該區域被減了二次。
所以可以得出\(s[x2][y2] - s[x2][y1 - 1] - s[x1 - 1][y2] + s[x1 - 1][y1 - 1]\)
\(s[x2][y1 - 1]\)可以類比一維的字首和,我們是減去下標前面的下標,之後也是相類似。
3.一維差分
1 2 3 4 5 6
1 1 1 1 1 1
差分處理:b[i] = a[i] - a[i - 1]
場景:
我們將下標1到下標3的數每個數加上一
使用樸素做法,那麼我們就要變數區域的每一個值加上一,\(0(n)\)的時間複雜度。
使用差分陣列,\(b[3 + 1] --,b[1]++\),只需要0(1)的時間複雜度。
還原陣列:b[i] += b[i - 1]
4.二維差分
使用上面二維字首和的例子
將(x1,y1)到(x2,y2)區域的陣列同時減或者加。
類似一維差分,是陣列的下一個下標進行。