一、快速排序演算法模板
void quick_sort(int q, int l, int r)
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
二、歸併排序演算法模板
void merge_sort(int q, int l, int r)
三、整數二分演算法模板
bool check(int x) // 檢查x是否滿足某種性質
// 區間[l, r]被劃分成[l, mid]和[mid + 1, r]時使用:
int bsearch_1(int l, int r)
return l;
}// 區間[l, r]被劃分成[l, mid - 1]和[mid, r]時使用:
int bsearch_2(int l, int r)
return l;
}
四、浮點數二分演算法模板
bool check(double x) // 檢查x是否滿足某種性質
double bsearch_3(double l, double r)
return l;
}
五、高精度加法
// c = a + b, a >= 0, b >= 0
vectoradd(vector&a, vector&b)
if (t) c.push_back(t);
return c;
}
六、高精度減法
// c = a - b, 滿足a >= b, a >= 0, b >= 0
vectorsub(vector&a, vector&b)
while (c.size() > 1 && c.back() == 0) c.pop_back();
return c;
}
七、高精度乘低精度
// c = a * b, a >= 0, b > 0
vectormul(vector&a, int b)
return c;
}
八、高精度除以低精度
// a / b = c ... r, a >= 0, b > 0
vectordiv(vector&a, int b, int &r)
reverse(c.begin(), c.end());
while (c.size() > 1 && c.back() == 0) c.pop_back();
return c;
}
九、一維字首和
s[i] = a[1] + a[2] + ... a[i]
a[l] + ... + a[r] = s[r] - s[l - 1]
十、二維字首和
s[i, j] = 第i行j列格仔左上部分所有元素的和
以(x1, y1)為左上角,(x2, y2)為右下角的子矩陣的和為:
s[x2, y2] - s[x1 - 1, y2] - s[x2, y1 - 1] + s[x1 - 1, y1 - 1]
十
一、一維差分
給區間[l, r]中的每個數加上c:b[l] += c, b[r + 1] -= c
十二、 二維差分
給以(x1, y1)為左上角,(x2, y2)為右下角的子矩陣中的所有元素加上c:
s[x1, y1] += c, s[x2 + 1, y1] -= c, s[x1, y2 + 1] -= c, s[x2 + 1, y2 + 1] += c
十
三、位運算
求n的第k位數字: n >> k & 1
返回n的最後一位1:lowbit(n) = n & -n
十
四、雙指標演算法
for (int i = 0, j = 0; i < n; i ++ )
常見問題分類:
(1) 對於乙個序列,用兩個指標維護一段區間
(2) 對於兩個序列,維護某種次序,比如歸併排序中合併兩個有序序列的操作
十
五、離散化
vectoralls; // 儲存所有待離散化的值
sort(alls.begin(), alls.end()); // 將所有值排序
alls.erase(unique(alls.begin(), alls.end()), alls.end()); // 去掉重複元素
// 二分求出x對應的離散化的值
int find(int x) // 找到第乙個大於等於x的位置
return r + 1; // 對映到1, 2, ...n
}
十
五、區間合併
// 將所有存在交集的區間合併
void merge(vector&segs)
); st = seg.first, ed = seg.second;
}else ed = max(ed, seg.second);
if (st != -2e9) res.push_back();
segs = res;
}
演算法競賽 基本模板
平時用到的標頭檔案,一些測試語句,所有的標頭檔案都是曾經用到過的,競賽用到過得標頭檔案也都寫了出來,空格以上表示c11才能支援 某些oj不支援c11 include include include include include include include include include inc...
dinic 演算法 基本思想及其模板
網路流博大精深 sideman語 乙個基本的網路流問題 感謝whd的大力支援 最早知道網路流的內容便是最大流問題,最大流問題很好理解 解釋一定要通俗 如右圖所示,有乙個管道系統,節點,有向管道,即有向圖一張.1 是源點,有無限的水量,4 是匯點,管道容量如圖所示.試問 4 點最大可接收的水的流量?這...
匈牙利演算法模板 KM演算法模板
匈牙利演算法模板 時間複雜度為o ve v為二分圖左邊的頂點數,e為二分圖中邊的數目 include includeconst int maxn 1010 const int maxm 20010 const int max 10001 const int inf 1000000000 int li...