杂项
绝对值函数abs
包含头文件 <cmath> 或 <cstdlib> 或 <std/c++.h>
库函数定义
int abs( int num );
float abs( float num );
double abs( double num );
long double abs( long double num );
long long abs( long long num );
总之:abs函数可用于int,float,double,long double,long long
lower_bound()与upper_bound()
用二分查找,在一个有序的序列中,查找大于等于(大于)\(x\)的数
注意:序列必须有序,否则需要先\(sort\)排序一下
时间复杂度:\(O(log(n))\)
用法一:
在升序序列中查找第一个大于等于(大于)x的数,如果找不到,则返回数组最后一个元素的下一个
int a[10] = {0, 1, 4, 3, 7, 2};
sort(a+1, a+1+5);
//在a[1~5]之间查找第一个大于等于x的数
//如果没有则返回a[5]的下一个位置
lower_bound(a+1, a+1+5, x);
//在a[1~5]之间查找第一个大于x的数
upper_bound(a+1, a+1+5, x);
用法二:
在降序序列中查找第一个小于等于(小于)x的数,如果找不到,则返回数组最后一个元素的下一个
int a[10] = {0, 1, 4, 3, 7, 2};
sort(a+1, a+1+5, greater<int>());
//在a[1~5]之间查找第一个小于等于x的数
//如果没有则返回a[5]的下一个位置
lower_bound(a+1, a+1+5, x, greater<int>());
//在a[1~5]之间查找第一个小于x的数
upper_bound(a+1, a+1+5, x, greater<int>());
__int128介绍
简介
当题目中数值范围超过long long(最大约9e18时),常规整型会发生溢出,导致结果错误。
而__int128是GCC编译器支持的128位整型,能存储范围为\(-2^{127} 到 2^{127}-1\)(约-1e38 ~ 1e38),可作为高精度算法的“轻量化替代方案”,无需复杂的高精度模板就能处理超大规模整数运算。
核心特性
存储范围:
signed __int128:支持-1e38 ~ 1e38(约39位十进制数)
unsigned __int128:支持0 ~ 2e38(无符号,范围更大)
运算支持: 支持+、-、*、/、% 等所有常规算术运算,用法与long long完全一致
效率优势:底层由编译器优化,运算速度远超手写高精度算法
使用场景:数值范围略超long long,但无需高精度算法的场景
输出
__int128不能直接用printf或cout输出,需要自定义输出函数
void p(__int128 x)
{
if(x > 9) p(x / 10);
putchar(x % 10 + '0');
}

浙公网安备 33010602011771号