上一页 1 ··· 3 4 5 6 7
摘要: 离散化 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)
摘要: 动态规划DP(一) 首先,我们知道在使用动态规划,也就是DP解题时,我们常会开一个数组DP,用来保存所有状态时的解。 递推,顾名思义,一步一步推导。 因此,在做该类型题目时,DP数组的每一个状态的值,都是由前面的值所推导出来的,可以用到min,max,和 等等。 解题时,一般先赋初始值,再寻找状态, 阅读全文
posted @ 2019-08-03 17:38 Yra 阅读(466) 评论(0) 推荐(0)
上一页 1 ··· 3 4 5 6 7