1.二分搜索
(1)最大化最小值(实际求最大值)
int l=0;
int r=INF;
int ans=-1;
while(l<=r)
{
int mid=(l+r)>>1;
if(check(mid))
{
ans=mid;
l=mid+1;
}
else
r=mid-1;
}
(2)最小化最大值(实际求最小值)
int l=0;
int r=INF;
int ans=-1;
while(l<=r)
{
int mid(l+r)>>1;
if(check(mid))
{
ans=mid;
r=mid-1;
}
else
l=mid+1;
}
2.辗转相除求最大公约数
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
3.快速幂运算
long long pow(int a,int b)
{
long long ans=1,base=a;
while(b)
{
if(b&1)
ans*=base;
base*=base;
b>>=1;
}
return ans;
}