一些亂七八雜的概念理解 合集

2021-09-25 14:39:46 字數 2939 閱讀 8471

目錄

主席樹:

線段樹:

最大流 = 最小割 :

逆元:威爾遜定理:

階乘 :

快速冪:

快速乘:

pollard rho+miller rabin:大素數判斷和素因子分解

一些數論知識:

離散化:

可以求第k大的數

理解參考:

bin巨的板子放一下嘻嘻 (可以求區間[l,r]內第k小的數)

#include #include #include #include #include #include using namespace std;

const int maxn = 100010;

const int m = maxn * 30;

int q, n, m, tot;

int a[maxn], t[maxn];

int t[maxn], lson[m], rson[m], c[m];

void init_hash()

sort(t + 1, t + 1 + n);

m = unique(t + 1, t + 1 + n) - t - 1;

}int build(int l, int r)

return root;

}int hash(int x)

int update(int root, int pos, int val)

else

c[newroot] = c[root] + val;

}return tmp;

}int query(int left_root, int right_root, int k)

else

}return l;

}int main()

init_hash();

t[n + 1] = build(1, m);

for (int i = n; i > 0; i--)

while (q--)

}return 0;

}

將陣列構建成一棵二叉樹,方便於區間查詢,單點更新

#include #include #include #include #include using namespace std;

#define ll long long

const int maxn = 1e8 + 5;

int arr[maxn], tree[maxn];

void build(int node, int start, int emd)

else

}void update(int node, int start, int emd, int idx, int val)

else else

tree[node] = tree[left_node] + tree[right_node];

}}int query(int node, int start, int emd, int l, int r)

else if (l <= start && r >= emd) else if (start == emd) else

}int main()

build( 0, 0, n - 1);// 建樹

printf("%d\n", query(0, 0, n - 1, 2, 5));

//查詢區間2,5之內的和

return 0;

}

從a地到b地有很多條路可以走 並且 每條路可能會有寬窄不同的地方(即權值不同)最大流就是從a地到b地 可以通過的最大流量的和 因為到比較窄的地方 就只能通過那麼一些流量 即時後來路變寬了 還是那麼點流量…… 

從最小割的理解看就是 使割掉的邊的權值最小 然後使兩點間沒有通路 的邊權之和

當且僅當p為素數時,(p - 1)! ≡ (-1) mod p

n!= n*(n-1)*(n-2)……*2*1注意 0!=1

通過二進位制轉換,將乘的次數分解,減少次數消耗的時間

與快速冪相似,比正常乘法快一些,也避免乘法過程中爆int / long long範圍

//判斷素數

bool miller_rabin(ll n)

for(int i=0; i

將範圍較大的有限個資料變成較小的數,使資料中的最大值盡可能小且保證所有資料都是正數。

理解參考:

栗子:12342434 12312 234234 12342434

可以離散化變成 3 1 2 3

資料一下子變小了 比較也更容易

板子如下:

#include#include //n 原陣列大小 num 原陣列中的元素 lsh 離散化的陣列 cnt 離散化後的陣列大小

using namespace std;

int main()

sort(lsh+1 , lsh+n+1);

cnt = unique(lsh+1 , lsh+n+1) - lsh - 1;

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

num[i] = lower_bound(lsh+1 , lsh+cnt+1 , num[i]) - lsh;

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

printf("%d ",num[i]);

return 0;

}

在某個部落格上看到了很神奇的操作

暫時沒看明白 先貼上**emm

struct nodenode[maxn];

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

}

先醬~~

C 一些概念理解

封裝 隱藏細節,資料和方法實行public,private,protece 繼承 不修改的前提下擴充套件功能 多型 將父類設定成於子類對等地執行操作 過載是函式名相同,引數不同 重寫是函式名相同,引數相同,子類重新定義父類的虛函式 1 類中有const和引用型別的成員。2 類中有某個成員類沒有pub...

一些雜的資料

這幾天學的東西太雜了,把接觸到的一些資料鏈結放上來 webkit perspective 3d透視屬性,該屬性可以將平面圖形轉化為具有遠景透視效果的3d圖形,該屬性只能使其孩子元素產生3d,不對自身節點內容產生影響 w3對css3中3d效果的圖景文章 css3的 nth child 偽類選擇器 圖示...

一些概念理解(持續更新)

分布式 不同的業務模組部署在不同的伺服器上或者同乙個業務模組分拆多個子業務,部署在不同的伺服器上,解決高併發的問題 集群 同乙個業務部署在多台機器上,提高系統可用性 通俗易懂的小例子 小飯店原來只有乙個廚師,切菜洗菜備料炒菜全乾。後來客人多了,廚房乙個廚師忙不過來,又請了個廚師,兩個廚師都能炒一樣的...