- 博客(18)
- 收藏
- 关注
原创 P3379 【模板】最近公共祖先(LCA)(倍增/树剖)
倍增代码:#include<bits/stdc++.h>using namespace std;const int maxn=5e5+5;int head[maxn],cnt,root,fx[21],lg[maxn],f[maxn][21],dep,depth[maxn],n,m,s;struct T{ int to,nxt;}edge[2*maxn]; void add(int from,int to){ edge[++cnt].to=to; edge[cnt].n
2021-11-03 00:02:29
138
原创 P3384 【模板】轻重链剖分/树链剖分
树链剖分模板题板子代码:#include<bits/stdc++.h>using namespace std;const int maxn=100010;#define ll long longint n,m,r,cnt,head[maxn],tot,size[maxn],dfn[maxn],num[maxn],in[maxn],father[maxn],depth[maxn],top[maxn],son[maxn];ll p;struct t{ int t,l;}e
2021-11-02 23:36:12
98
原创 平衡树(Treap)
洛谷 P3369 【模板】普通平衡树Treap模板:#include<bits/stdc++.h>using namespace std;int n,type,cnt,ans,orz,root;struct T{ int left,right,key,weight,son,equ;}node[100010];void update(int t){ node[t].son=node[node[t].left].son+node[node[t].right].son+node[
2021-10-30 18:03:26
120
原创 乘法逆元(线性)
题目背景这是一道模板题题目描述给定 n,pn,p 求 1\sim n1∼n 中所有整数在模 pp 意义下的乘法逆元。输入格式一行两个正整数 n,pn,p。输出格式输出 nn 行,第 ii 行表示 ii 在模 pp 下的乘法逆元。这是一道坑题,直接做qsm全是TLE。推线性方程。推导:前提:inv[1]=1;求:i * x = 1 (mod p)不妨令p=ax+b;ax+b=0(mod p)同乘a,b逆元a inv[b]+inv[x]=0 (mod p)inv[x]=-a i
2021-08-15 12:30:43
289
原创 dij(堆优化)
题目描述给定一个 nn 个点,mm 条有向边的带非负权图,请你计算从 ss 出发,到每个点的距离。数据保证你能从 ss 出发到任意点。输入格式第一行为三个正整数 n, m, sn,m,s。 第二行起 mm 行,每行三个非负整数 u_i, v_i, w_iui,vi,wi,表示从 u_iui到 v_ivi有一条权值为 w_iwi的有向边。输出格式输出一行 nn 个空格分隔的非负整数,表示 ss 到每个点的距离。注意本代码第27行,千万不能落,否则就
2021-08-15 10:36:51
801
原创 最近公共祖先(LCA)
题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。输入格式第一行包含三个正整数 N,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。接下来 N-1N−1 行每行包含两个正整数 x, yx,y,表示 xx 结点和 yy 结点之间有一条直接连接的边(数据保证可以构成树)。接下来 MM 行每行包含两个正整数 a, ba,b,表示询问 aa 结点和 bb 结点的最近公共祖先。输出格式输出包含 MM 行,每行包含一个正整数,依次为每一个询问的结果。趁着假期打一波
2021-08-15 08:32:34
164
原创 线段树(累乘)
线段树 乘+加居然错在了输入是循环m而不是n,卡了一个小时。。。。。。一份优美的代码:#include<bits/stdc++.h>using namespace std;#define ll long longconst ll maxn=1e5+1;struct T{ ll data,add,mul,l,r;}node[4*maxn];ll n,m,p,a[maxn],i;ll type,x,y,k;void build(ll pos,ll l,ll r){ no
2021-08-15 00:55:05
78
原创 线段树(累计和)
好气啊,因query和change的函数l,r返回值报错憋了5分钟,下次一定注意long long暴力美学这份代码写的还是很美观的#include<bits/stdc++.h>using namespace std;const long long maxn=1e5+1;long long n,m,a[maxn];struct T{ long long data,add,l,r;}node[4*maxn];void build(long long pos,long long
2021-08-14 22:08:30
54
原创 好文章(双哈希)
好文章 (article.pas/c/cpp)【问题描述】 nodgd 写了一篇文章,自认为这是一篇好文章。nodgd 的文章由݊个小写英文字母 组成。文章的一个子串指的是文章中的一段连续的字母,子串的长度就是这一段 的字母个数。nodgd 在文章中用了排比、对偶、前后照应之类的手法,所以就有 很多个子串是相同或者相近的。为了向大家证明这是一篇好文章,nodgd 决定给 自己的文章进行评分。nodgd 首先确定了一个整数݉,然后统计出文章中有多少 个不相同的长度为݉的子串,这个数量就是文章的评分。 然而,
2021-08-12 23:10:54
223
原创 奇怪的队列(线段树/vector水过)
奇怪的队列 (queue.pas/c/cpp)【问题描述】 nodgd 的粉丝太多了,每天都会有很多人排队要签名。 今天有݊个人排队,每个人的身高都是一个整数,且互不相同。很不巧,nodgd 今天去忙别的事情去了,就只好让这些粉丝们明天再来。同时 nodgd 提出了一个 要求,每个人都要记住自己前面与多少个比自己高的人,以便于明天恢复到今天 的顺序。 但是,粉丝们或多或少都是有些失望的,失望使她们晕头转向、神魂颠倒,已经 分不清楚哪一边是“前面”了,于是她们可能是记住了前面比自己高的人的个数, 也可能是记
2021-08-12 21:50:02
138
原创 浅谈vector
这个vector实在太事多了首先,vector作为滚动数组,有一个非常特殊的功能,就是特别能挤:根据这种骚气的操作,衍生出了vector的滚动。敲黑板:将几个vector的重要函数1.vector定义:vector vec;(没有存储空间)vector vec(10);(先定义10个存储空间)vector vec(10,1);(10个存储空间值都为1)vector vec(a);(将a复制到vec)要注意:vector是从下标0开始存储!!!2.vector操作vec.clear(
2021-08-12 21:42:21
128
原创 浅谈重载运算符
重载运算符听起来就很高深,其实就是你看不惯系统对于“<”,“>”之类的符号的定义,自己进行修改。下面给一个模板:bool operator < (const node &a,const node &b) //node可以为其他类型{ return a.v<b.v; //这里有点sort中的cmp的味道}要注意的是:代入的a,b前一定要有 & ,因为只会修改!...
2021-08-11 23:56:16
62
原创 质数(数论)
质数 (prime.pas/c/cpp)【问题描述】 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特 的情感。小 X 认为,质数是一切自然数起源的地方。 在小 X 的认知里,质数是除了本身和 1 以外,没有其他因数的数字。 但由于小 X 对质数的热爱超乎寻常,所以小 X 同样喜欢那些虽然不是质数,但 却是由两个质数相乘得来的数。 于是,我们定义,一个数是小 X 喜欢的数,当且仅当其是一个质数,或是两个 质数的乘积。 而现在,小 X 想要知道,在 L 到 R 之间,有多少数是他喜欢的数
2021-08-11 23:50:43
281
原创 欧拉筛(数论)
突然发现自己欧拉筛写错了。。。。。。我欧拉筛写错了???!!!今天复习一下欧拉筛欧拉筛和埃氏筛的区别,无非就是时间复杂度差了那么一个log n(但有时差之毫厘,谬之千里)埃氏筛的复杂度高就高在有重复,而欧拉筛没有。详见代码:#include<bits/stdc++.h>using namespace std;int n,cnt,prime[10000000],vis[10000000];void ouler(int x){ for(int i=2;i<=x;i++)
2021-08-11 23:33:55
74
原创 序列问题(数论)
序列问题【问题描述】Brunhilda 十分喜欢序列, 她喜欢观察序列的性质。现在 Brunhilda 手上有 n 个不同的数, 于是她尝试将这 n 个数字填到长为 n 的序列 A 中。在她看来当序列 A 的第 i 位上数字在原来 n 个数中恰好是第 i 大时,i 号位置就是稳定的。并且, 当序列中恰好有 m 个位置是稳定时, 她的开心度就会加 1。那么, 她想知道, 她的开心度最大可能是多少。由于Brunhilda 的开心度可能会很大,所以你只要输出开心度除以 1000000007 的余数。【输入格
2021-08-11 22:49:10
270
原创 球场大佬(数论)
球场大佬 时限:1000ms 空限:128M 题目描述: 每天下午,古猴都会去打羽毛球。但是古猴实在是太强了,他必须要到一些比较 强的场去打。但是每个羽毛球场都有许多的人排着队,每次都只能上四个人,每个人 都有自己的能力值,然而这四个人的总能力的高低与否才是古猴是否决定参加这个场 的关键。 每四个人的总能力值的定义是:任意选两个与另两个 PK,能力值的贡献是较高的 一组减去较低的一组。比如能力值为 5 和 7 的去 PK 6 和 10 的差值,那么用较高的减 去较低的就是
2021-08-10 22:08:55
82
原创 猫(后悔贪心)
猫(cat) 【问题描述】 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手 来帮他们消灭猫. 信息组现在共有 n 只猫(n 为正整数),编号为 1 到 n,站成了一个环,第 i 只猫的 左边是第 i-1 只猫,右边是第 i+1 只猫.特别的,第 1 只猫的左边是第 n 只猫,第 n 只 猫的右边是第 1 只猫.每只猫拥有价值,表示消灭它能给信息组组长带来的声誉. 注意,有的猫价值为负数,这意味着消灭它会损害组长的声誉. 神刀手可以选择一些猫消灭掉.但是,
2021-08-09 23:26:39
223
原创 组合数问题(数论)
组合数问题(problem)【问题描述】 定义"组合数"S(n,m)代表将 n 个不同的元素拆分成 m 个非空集合的方案 数.举个栗子,将{1,2,3}拆分成 2 个集合有({1},{2,3}),({2},{1,3}),({3},{1,2})三种拆分 方法.小猫想知道,如果给定 n,m 和 k,对于所有的 0<=i<=n,0<=j<=min(i,m),有多少对 (i,j),满足 S(i,j)是 k 的倍数. 注意,0 也是 k 的倍数,S(0,0)=1,对于 i>=1,S(i
2021-08-09 22:14:25
500
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人