摘要: 线段树就是一棵二叉树,用于求区间修改,区间查询,预处理的时间复杂度为o(nlogn),查询的时间复杂度为o(mlogn)。 在区间修改上,如果每次都进行单点修改,那么修改一次的时间复杂度是o((r-l+1)logn),这样可能会t,所以可以用lazy标记进行操作。就是懒操作。 当区间下置到一个节点时 阅读全文
posted @ 2023-07-30 21:37 DLSQS 阅读(51) 评论(0) 推荐(0)
摘要: 同余: 简单来说就是在除法中取模要找到其逆元 逆元:如果一个线性同余方程ax ≡ 1( mod b),则x称为a mod b的逆元 简单来说就是mod b是一种环境,而所求的x是a在mod b环境中的倒数 以下是求逆元的法子 扩展欧几里得法求逆元,时间复杂度o(logn) void exgcd(in 阅读全文
posted @ 2023-07-30 21:15 DLSQS 阅读(85) 评论(0) 推荐(0)
摘要: 埃氏筛,时间复杂度o(n*log(log2n)) 将数从2遍历,如果没有被筛掉,则说明这个数是质数,然后将质数的倍数全部筛掉 for (int i = 2; i <= n / i; i++) if (!pri[i])//若i未被筛掉则必定是质数 for (int j = i * i; j <= n; 阅读全文
posted @ 2023-07-30 20:29 DLSQS 阅读(63) 评论(0) 推荐(0)
摘要: 欧几里得: void gcd(int a, int b) { return gcd(b, a % b); } 扩展欧几里得: 根据裴蜀定理可以求出ax+by=c的直线上的所有整数解。 裴署定理:设a,b是不全为零的整数,则存在整数x,y, 使得ax+by=gcd(a,b) . 存在x和y使得ax+b 阅读全文
posted @ 2023-07-30 19:39 DLSQS 阅读(29) 评论(0) 推荐(0)
摘要: 对于LIS,如果下一个数大于目前最长序列数的最后一位,则将最长序列数+1,反之则直接用lower_bound()进行二分查找,找到第一个大于等于这个数的序列数,将它替换,此替换过程不影响最长序列的个数。 同理,对于LDS,如果下一个数小于等于目前最长序列数的最后一位,则最长序列数+1,反之利用upp 阅读全文
posted @ 2023-07-30 16:52 DLSQS 阅读(110) 评论(0) 推荐(0)
摘要: 二维(内存爆啊啊啊啊啊啊啊啊啊啊啊啊啊啊) for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { if (j < v[i])//若当前背包容量装不下第i个物品 f[i][j] = f[i - 1][j];//不拿此物品,等价于拥有i- 阅读全文
posted @ 2023-07-30 16:01 DLSQS 阅读(61) 评论(0) 推荐(0)
摘要: 总感觉背包问题比赛中根本不会遇到。。。 二维(一样爆内存) for (int i = 1; i <= n; i++)//完全背包可以重复装相同的物品 for (int j = 0; j <= m; j++) { f[i][j] = f[i - 1][j]; if (j - v[i] >= 0)f[i 阅读全文
posted @ 2023-07-30 15:54 DLSQS 阅读(25) 评论(0) 推荐(0)