重载 set<pair>

1
2
3
4
5
6
7
8
9
class cmp {
public:
bool operator()(const pair<char, int>& a, const pair<char, int>& b) const {
return a.second == b.second ? (a.first < b.first) : (a.second < b.second);
}
};

set<pair<int, int> > S1;
set<pair<int, int>, cmp> S2;

__builtin 函数

__builtin_popcount:二进制中 1 的个数

__builtin_ctz:末尾的 0,即对 lowbit 取log

__builtin_clz:开头的 0,用 31 减可以得到下取整的 log

复杂度都是 O(1),有些常数会有点大。

如果是 long long,函数名末尾加 ll,31 改成 63。