一些小技巧
枚举二进制下的子集
for(int s=S;s;s=(s-1)&S)
然后 \(s\) 就枚举了 \(S\) 二进制下的所有子集。
全排列
c++ 内置了一个比较方便的函数:
next_permutation()
我们可以通过这个直接得到下一个全排列。
具体的使用方法是开一个数组初始塞上一个排列然后调用即可
int a[10]
for(int i=0;i<10;i++)a[i]=i;
do{
}while(next_permutation(a,a+10)); //这里是正常的左闭右开
清空 vector
vector<int>().swap(vec);
对单个元素的排序
如果我们不需要对整个序列排序,只需要要求某一个位置是排序后正确的元素,就用
nth_element(a+l,a+mid,a+r+1,cmp)
其保证了 \(mid\) 左边的位置全部小于它,右边都大于它。