随笔分类 - 板子
摘要:倍增求lca struct edge{ int v,w; }; //思考:要想知道一个数有几个二级制位,直接n=__lg(x) //我们可以知道<n最近的2的次幂,9最大的是8,8虽然是2的3次方,但要遍历它的每一位 //需要3到0开始,也就是考虑到0的影响,我们可以正好满足偏移。 //2的3次方有
阅读全文
摘要:https://codeforces.com/contest/1950/problem/G 在非连通图上找到一条包含点最多的路径,dp数组维护可达性 // Problem: G. Shuffling Songs // Contest: Codeforces - Codeforces Round 93
阅读全文
摘要:动态维护第k大 priority_queue<int> a; //大根堆 priority_queue<int,vector<int>,greater<int> > b; for(int i=1; i<=n; i++){ int x; scanf("%d",&x); if(b.empty()||x>
阅读全文
摘要:debug:重载乘号的时候要把两个传进来的矩阵用起来 // Problem: P3390 【模板】矩阵快速幂 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P3390 // Memory Limit: 256 MB // Tim
阅读全文
摘要:int n, m; int k; struct matrix{ int c[101][101]; matrix(){memset(c,0,sizeof c);} }; matrix operator*(matrix &a,matrix &b){ matrix t; for(int i=1;i<=n;
阅读全文
摘要:1.单点加 2.前缀和查询 int n, m; int a[N]; int tr[N]; int lowbit(int x){ return x&(-x); } void add(int pos,int k){ for(int i=pos;i<=n;i+=lowbit(i))tr[i]+=k; }
阅读全文
摘要:以一道区间和查询来说明板子如何使用 1.merge的时候只需要维护两个根节点的距离,利用的是合并时题目给的信息 2.find的时候更新维护是子节点到根的距离 3.需要加一个查询函数,因为距离数组是开在结构体内部的。 题目描述 对于一个长度为 \(N\) 的整数数列 \(A_{1}, A_{2}, \
阅读全文
摘要:int id(int x,int y,int m){ //m列 return m*(x-1)+y; } pii rid(int u,int m){ int x=(u+m-1)/m;//m列 int y=u%m;if(y==0)y+=m; return make_pair(x,y); }
阅读全文
摘要:inline void read(__int128 &x) { x=0; int f=1;//判断正负 char ch=getchar();//读入字符 while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&
阅读全文
摘要:三分法是二分法的变种,他最基本的用途是求单峰函数的极值点。 三分适用的情况:有唯一的最大值,满足最大值左侧严格单调递增,右侧严格单调递减(或左减右增)。强调严格单调,这样在确定最值是才能判断最值的位置,否则三分法不能缩小左右边界。 三分整数模板 整数的三分可能具有不确定性,可以通过改变while循环
阅读全文
摘要:将O(n)优化成o(根号n) [CQOI2007] 余数求和 题目描述 给出正整数 \(n\) 和 \(k\),请计算 \[G(n, k) = \sum_{i = 1}^n k \bmod i \] 对于 \(100\%\) 的数据,保证 \(1 \leq n, k \leq 10^9\) void
阅读全文
摘要:输出一个整数,表示a*b mod p的值。 数据范围 1≤a,b,p≤1018 ll qadd(ll a, ll b, ll p) { ll res = 0; while (b) { if (b & 1) res = (res + a) % p; a = (a + a) % p; b >>= 1;
阅读全文
摘要:给定一棵有 \(n\) 个点的树,询问树上距离为 \(k\) 的点对是否存在。 第一行两个数 \(n,m\),n个点。 第 \(2\) 到第 \(n\) 行,每行三个整数 \(u, v, w\),代表树上存在一条连接 \(u\) 和 \(v\) 边权为 \(w\) 的路径。 接下来 \(m\) 行,
阅读全文
摘要:树上启发式合并(常常也叫DSU On Tree,但其实和DSU并没有特别大关系),是一种解决某些树上离线问题的算法,尤其常被用于解决“对每个节点,询问关于其子树的某些信息”这样的问题。 假设我们要对树上的每个节点p求ans[p] ,且这个ans[p] 可以通过合并p的子节点的某些信息得知,一般来说我
阅读全文
摘要:已知一棵包含 \(N\) 个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 1 x y z,表示将树从 \(x\) 到 \(y\) 结点最短路径上所有节点的值都加上 \(z\)。 2 x y,表示求树从 \(x\) 到 \(y\) 结点最短路径上所有节点的值之和。 3 x z,表
阅读全文
摘要:N,M,S,分别表示树的结点个数、询问的个数和树根结点 理论时间复杂度上界就是O(2n+mlogn) const int N=500010; int n,m,s,a,b; vector<int> e[N]; int fa[N],son[N],dep[N],siz[N]; int top[N]; vo
阅读全文

浙公网安备 33010602011771号