二分函数
m=lower_bound(dp+1,dp+1+len,x) - dp
m等于 dp数组中下标从1到len 的第一个大于等于x的数的下标
m=upper_bound(dp+1,dp+1+len,x) - dp
m等于 dp数组中下标从1到len 的第一个大于 x的数的下标
快速幂(取模)
ll qpow(ll a,ll b,ll m){
ll ans=1;
ll k=a;
while(b){
if(b&1) ans=ans*k%m;
k=k*k%m;
b>>=1;
}
return ans;
}
GCD(最大公约数)LCM(最小公倍数)
ll gcd(ll a,ll b)
{
if(b==0) return a;
else
return gcd(b,a%b);
}
对于2个数a,b;
gcd乘lcm=a*b; (gcd为gcd(a,b)简写)
我们习惯写为lcm = a / gcd * b,以此来避免 a乘b 溢出
全排列函数
next_permutation(a+i,a+n+i);
把a数组的以下标为i开始的前n个元素的排列变为其字典序的下一个排列,其他元素位置不变
prev_permutation(a+i,a+n+i);
同理,变为前一个排列