C++ algorithm 库

sort、二分、排列、最值

排序

sort(a, a + n);
sort(v.begin(), v.end());
sort(v.begin(), v.end(), greater<int>());  // 降序
stable_sort(/* 稳定排序 */);

二分

// 有序序列中第一个 >= x
int i = lower_bound(a, a + n, x) - a;
// 第一个 > x
int j = upper_bound(a, a + n, x) - a;

最值与求和

*max_element(a, a + n);
*min_element(v.begin(), v.end());
accumulate(a, a + n, 0LL);

翻转、去重

reverse(v.begin(), v.end());
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());

排列

next_permutation(a, a + n);  // 字典序下一个

其他

swap(a,b)min(a,b)max(a,b)__gcd(a,b)(C++17)。