摘要:
离散化 1、排序 2、对排序后的数据去重(可以使用unique),同时用1-m的数字和新数组储存; void discret() { sort(a + 1, a + 1 + n); int tot = 0; For(i, i, n) { if(i == 1 || a[i] != a[i-1]) un 阅读全文
posted @ 2021-11-04 20:22
Yra
阅读(93)
评论(0)
推荐(0)
摘要:
0x04 二分 两种二分写法: int l = 0, r = n + 1; while(l < r) { mid = l + (r - l) / 2; if(a[mid] >= x) r = mid; else l = mid + 1; } while(l < r) { mid = (l + r + 阅读全文
posted @ 2021-11-04 20:21
Yra
阅读(221)
评论(0)
推荐(0)
摘要:
前缀和 f[i] [j]为前缀和数组,a[i] [j]为原数组 f[i] [j] = f[i-1] [j] + f[i] [j-1] - f[i-1] [j-1] + a[i] [j] 算区间前缀和,画个图推公式 差分 原数组a[i], 差分数组f[i] = f[i] - f[i-1], f[1] 阅读全文
posted @ 2021-11-04 20:20
Yra
阅读(75)
评论(0)
推荐(0)
摘要:
位运算 1、a*b%p 方法一:将b用二进制表示然后递推累乘 for(; b; b >>= 1) { ans = (ans + (b & 1) * a % p) %p; a = a * 2 % p; } 方法二:将ab mod p 转换成 ab - ⌊ab/p⌋ * p 令c = ⌊ab/p⌋; 用 阅读全文
posted @ 2021-11-04 20:18
Yra
阅读(120)
评论(0)
推荐(0)
摘要:
树状数组 树状数组可以将一整个区间划分为几个区间,T[i]包含的A[]原数组数量为 lowbit(i), 单点更新,区间查询 //单点更新操作 void update(int i, int x) { for(; i <= n; i += lowbit(i)) { t[i] += x; } } //区 阅读全文
posted @ 2021-11-04 20:16
Yra
阅读(43)
评论(0)
推荐(0)
摘要:
ST表 处理RMQ问题,即区间最值 用O(nlogn)预处理,O(1)查询最值 思想:倍增 maxx[i] [j] 表示从i位置开始的$2^j$个数字的最大值 板子 //#pragma comment(linker, "/STACK:10240000000000,10240000000000") / 阅读全文
posted @ 2021-11-04 20:15
Yra
阅读(140)
评论(0)
推荐(0)

浙公网安备 33010602011771号