随笔分类 - c++——算法
摘要:思想或许可以看作: 实质是枚举所有的情况,来达到想要的目的,但是这个过程中,通过局部的最优解(线性的推导),来省略了很多种情况,从而减少时间复杂度。 应用: 遇到取数问题 和一些明显有背包影子的东西。 二进制多重背包问题: 仔细看代码 #include <bits/stdc++.h> using n
阅读全文
摘要:概念:利用二进制,每一个节点对某些节点进行包含 应用: 单点修改+区间查询,大多数时候都是一次只改一个树,查询区间内出现的次数 排序+树状数组可以模拟左边有没有比他大的数。 #include <bits/stdc++.h> using namespace std; #define ri regist
阅读全文
摘要:带权并查集 概念: 就是合并的时候加个权值,找祖父时加个权值。 对于闭区间的时候一定要变成开区间 a-1 ->B 很关键 下面 一定要 a--;将这个东西给连接起来。( 】 应用: 针对性的解决 一个很长的区间问题。 给出很多的小区间 ,来判断 这些小区间很前面的小区间冲不冲突 int find(i
阅读全文
摘要:组合数取mod 条件mod是质数,inv 是逆元,fac是阶层; ll fact[maxn],inv[maxn]; ll Pow(ll x,ll n){ ll ans=1,base=x; while(n){ if(n&1) ans=ans*base%mod; base=base*base%mod;
阅读全文
摘要:时间复杂度:不修改的时间复杂度 为n*logn 修改的n*pow(n,0.6666) 思想: 优化的暴力,对询问进行离线化的操作,减少一些重复的元素的时间复杂度。 应用: 针对某些以元素大小为单位的大量询问,给出了,l 和 r。 其实看到 l,r 就可以想想是不是线段树,莫队,树状数组啥的。 一般莫
阅读全文
摘要:思想:把树拆分成 一条一条的线段(利用重链) 在变成1条线(从而利用线段树处理) 应用: 主要是 对数的lca求解,并且对lca的路径上进行查询和修改。 两次dfs 进行构建 第一次 为拆分树做准备: 重儿子 son,每一个点的深度,父亲,尺寸; int dep[M],vis[M],fa[M],so
阅读全文
摘要:利用2进制的思想(把 要^的数 二进制化) 同时 将 a 化为二进制每一位的单位 a乘着走 仔细看代码 int n,m; long long P; long long qsn(long long a,long long b) // 函数中的long long { long long ans=1; /
阅读全文