日常
文章平均质量分 59
laruat
SSL
展开
-
关于树链剖分
树链剖分模板题顾名思义,即是把树的形态用线性链表表示出来。那么首先就是要造个树。ll siz[N],dep[N],son[N],fa[N];//son是以x为祖先的重儿子坐标 void build_tree(int now){ siz[now]=1;//初始化树的大小 for(int i=he[now];i;i=nxt[i]) { int tar=to[i]; if(tar==fa[now]) continue; fa[tar]=now,dep[tar]=dep[now]+1;原创 2022-02-19 08:40:02 · 110 阅读 · 0 评论 -
初赛---主定理 只是背一下。。-蒟蒻
假设有一个函数T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n)(f(n)f(n)f(n)大概率都是一个常量)设reasonreasonreason为此函数的时间复杂度那么如果 f(n)<nlogbaf(n)<nlog_baf(n)<nlogba则 reason=O(nlogba)reason=O(n^{log_ba})reason=O(nlogba)如果 f(n)=nlogbaf(n)=nlog_baf(n)=nlogb原创 2021-09-04 16:10:34 · 80 阅读 · 0 评论 -
Day 11别问我中间发生了啥。
水到炸的数论 ? 莫队+树状数组 矩阵快速幂ABCADecription:给出 n个数字的一个序列A,你可以将他们分为若干组,每一组的权值是里面数字的异或和,求使得所有组权值和最小。Input第一行给出一个n接下来一行给出序列AOutput输出一行包括一个整数表示最小的权值和Sample Input:51 2 6 4 3Sample Output:2Data Constraint思路:异或来异或去,其实就是不进位的加法,那么最优的解法实际上是把所有异或起来原创 2021-08-25 09:08:11 · 155 阅读 · 0 评论 -
Splay
#include<iostream>#include<cstdio>#define N 100000#define push_up(x) t[x].size=t[t[x].son[0]].size+t[t[x].son[1]].size+1using namespace std;int n,m,l,r,root,tot;struct node{ int size,son[2],mark,val,pre; void init(int x,int fa) {原创 2021-08-21 11:53:44 · 69 阅读 · 0 评论 -
DAY 6
数论 模拟 数论 数论?AADecription:C(n,m)=P(n,m)m!=n!m!(n−m)!C(n,m)=\frac{P(n,m)}{m!}=\frac{n!}{m!(n-m)!}C(n,m)=m!P(n,m)=m!(n−m)!n!,判断其结果奇偶性InputOutputSample Input:27 38 2Sample Output:10思路求啥找啥,就把阶乘中的2的个数预处理出来,之后看一下如果分子的2的数量大于分母那么其一定为偶数,反之则原创 2021-08-20 11:06:24 · 77 阅读 · 0 评论 -
Treap(AVL)板子
神仙东西高级的呀,100多行,调了我亿点点时间。哦也,过了直接放代码,代码有注释。#include<iostream>#include<cstdio>#include<cstdlib>#define N 100000#define INF 1000000000 using namespace std;int n,opt,x;int son[N+1][2],val[N+1],data[N+1],size[N+1],tot,cnt[N+1],root;i原创 2021-08-18 21:18:59 · 156 阅读 · 1 评论 -
Day 5
题目序号Decription:Input输入要求Output输出要求Sample Input:56 67 78 89 910 1Sample Output:6666667777777888888881755646112866758思路:很显然从数据规模和这些诡异的数字轻松得知此题是数论,那么怎么做呢,首先我们要输出的结果是kkkkkk这个数,那么我们可以把它化成k*(10010^0100+10110^1101+…+10n10^n10n),那么很显然 赛原创 2021-08-17 07:57:15 · 122 阅读 · 0 评论 -
Count on a tree
树上主席树练习luogu P2633#include<iostream>#include<cstdio>#include<algorithm>#define N 100000#define NlogN 2500000 using namespace std;int n,m,a[N+1],b[N+1],tree[N+1],l[NlogN],r[NlogN],sum[NlogN],deep[N+1],f[N+1][31],tot,len,mid,u,v,k,l原创 2021-08-15 21:29:44 · 52 阅读 · 0 评论 -
主席树板子
主席树------以线段树为基础的线段树板子题如果我们要离线查询一个区间内的第k小或第k大的值,那么我们可以用主席树,保证复杂度在O(mlogn)内,对于板子题来讲是刚刚好的,那么我们先上代码。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define N 4000000#define M 200000原创 2021-08-13 19:37:34 · 126 阅读 · 0 评论 -
博客写题板子
题目序号Decription:题目描述Input输入要求Output输出要求Sample Input:输入样例Sample Output:输出样例Data Constraint数据要求Hint样例注释原创 2021-08-13 10:33:10 · 73 阅读 · 0 评论 -
打莫队板子
莫队算法有点像分块,但是他充分的利用了排序将时间复杂度优化到了极致,显然在luogu 19721e6下肯定试过不了的,主要是chen_zhe不让过,……原本1e5是可以的,所以优化到最好的顶多拿60分。#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#define N 1000000using namespace std;int n,m,a[N+1],q,p原创 2021-08-13 10:25:42 · 84 阅读 · 0 评论 -
2021暑假集训Day 4
数论 背包 分块 数论? ABCD 后续更新ADecription:若数列A存在位置k,满足①i<k,ai<ai+1②i>=k,ai>ai+1则称该数列为单峰数列给出正整数n,求全排列n中存在多少个单峰数列Input给出1个正整数nOutput单峰数列个数(对10^9+7取模)Sample Input:3Sample Output:4Data Constraint20%:n ≤\leq≤ 1050%:n ≤\leq≤ 10^原创 2021-08-12 22:07:43 · 143 阅读 · 0 评论 -
2021暑假集训 Day 3
暴力出奇迹的一天ABCDADecription:有n个信号,第i个信号强度为bi。总体强度为各操作信号的强度之和。为保证信号强度需要删除某些信号。有m个操作人员,第i个人只会删除编号在L[i]和R[i]之间的信号,每删除一个信号,花费C[i]格能量。飞船一共有 k格能量,问在队友删除完信号后,总体强度最大是多少。Input第一行给出2个正整数n,m,k第二行给出n个信号的强度bi接下来m行,每行用L,R,C来描述一个操作人员Output总体最大强度Sample Inp原创 2021-08-11 20:42:35 · 237 阅读 · 2 评论 -
2021暑假集训 Day 2
回顾:就不知道今天为什么那么想尝试富文本编辑器了……A今天的第一题非常的无语呵,想了90min?而且差一个longlong就A了,别吧,心态炸裂。Decription:n个小球排成一列,第i个小球颜色为ai,定义小球i与j的距离为|(i-j)*(ai-aj)|,求所有小球间距离之和,i与j 和 j与i 不必重复计算。Input:第一行一个n第二行给出a1,a2,...,an-1,anOutput按照题目要求作答...原创 2021-08-10 19:58:27 · 128 阅读 · 0 评论 -
2021暑假集训 Day 1
学校刷题Day 1 -- 2021-8-9ABDADecription:定义操作a(X)B=((a&b)+a(a|b))>>1给出n个数ai每次用操作合并任意相邻ai求进行n-1次操作以后可能得到的最终结果所有结果从小到大输出Input第一行一个n第二行给出a1,a2,…,an-1,anOutput按题目要求作答Sample Input:41 4 3 2Sample Output:1 2Data Constraint30% n&原创 2021-08-09 21:03:57 · 235 阅读 · 0 评论 -
ybtoj 单词频率
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#define N 1100001using namespace std;int n,trie[N][26],tot=1,s[N][2],las[201],nxt[N],que[N];char w[N];void ins(int num){ int r=1,x,len=strlen(w+1); for(int原创 2021-07-06 10:40:46 · 103 阅读 · 0 评论 -
AC自动机学习笔记
今天刚刚学习了AC自动机,刷了个模板题。前置知识:trie树和KMP。其实说实话吧,KMP在AC自动机里的运用其实就是失配指针。失配指针其实就是在trie树上寻找最长的后缀,采用bfs的顺序是为了保证前后顺序的不变,当你在当前节点的时候知道你的上一层节点的失配指针的指向,在匹配中就可以节约大量时间来进行多模式串的匹配。下附代码#include<iostream>#include<cstdio>#include<cmath>#include<cstri原创 2021-07-05 11:32:26 · 76 阅读 · 0 评论 -
KMP算法基础入门笔记
KMP学习笔记。主要还是自己的领悟嘿嘿先看主要代码:#include<iostream>#include<cstdio>#include<cstring>using namespace std;char s[1000010],ss[11000001]; int p[1100001],ls,lss,ans;int main(){ cin>>s+1>>ss+1; ls=strlen(s+1),lss=strlen(ss+原创 2021-07-02 15:45:44 · 92 阅读 · 0 评论 -
CF963A Alternating Sum
Alternating Sum题目传送门思路:这道题呀,需要涉及到两个数学知识,一是逆元,二是等比数列求和公式。一:逆元我们知道 mod 这个东西在题目中时常出现,他可以用于加法,减法,乘法,然而,对于除法,它就不符合了,假定x是a的逆元值,那么b/a%c=b*x%c,就把除法转换成乘法,从而可以运用同余定理,防止计算中的数爆炸,是不是非常的有用 ,嗯~~~~。那么怎么求出a的逆元值呢,根据费马小定理,(有兴趣可以了解一下哈),因为小编也没怎么看懂,所以直入主题,简单来说就是b/a%c=b*a^(原创 2021-01-21 07:55:03 · 140 阅读 · 0 评论 -
离散化
思想 离散化例题 火烧赤壁 luoguP14963-1 15 112 9由此可得基本思想-1 0 1~~~~~~~~5 6 7 8 9 10 11 ~~~~~~~~~~ 2 3 4 5 6 7 8 9 被火烧了合并后 即 -1 0 ~~~~~~~~~~~~~ 2 3 4 5 6 7 8 9 10 11 被火烧了那么我们就可以考虑一种将x,y打乱的一种思想----离散化AC代码#include<iostream>#include<cstdio>#i原创 2021-01-09 17:13:10 · 77 阅读 · 0 评论 -
树状数组 基础篇
树状数组支持单点增加,意思是给序列中的某个数A[x]加上y,同时正确维护序列的前缀和。根据上面给出的树形结构和它的性质,只有节点c[x]及其所有祖先节点保存的“区间和”包含A[x],而任意一个节点的祖先至多只有logN个,我们逐一对它们的c值进行更新即可。下面的代码在O(logN)时间内执行单点增加操作。原创 2021-01-09 16:53:01 · 135 阅读 · 0 评论 -
浅谈线段树
浅谈线段树 ——因为是蒟蒻首先,先解决一个问题,线段树的结构以及工作原理。先放个图片看看。##这是我们梦中的线段树这是一个满二叉树,挺好看的 。再向下延伸的节点就代表[1,1],[2,2]~~~~[n,n]的单点那么我们为什么要用它,只因为他速度快且有树状数组所代替不了的功能,(但没有树状数组快有时)用法与区别线段树和树状数组的基本功能都是在某一满足结合律的操作(比如加法,乘法,最大值,最小值)下,O(logn)的时间复杂度内修改单个元素并且维护区间信息。不同的是,树状数组只能维护前缀“原创 2021-01-09 10:01:39 · 171 阅读 · 0 评论 -
工程
工程#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;int nn,m,kk;int f[201];bool r[201];//pair<int,int> road[201];int deg[201];int n[201],h[201],to[20001],cnt;pair<int,int>原创 2020-12-25 20:47:06 · 61 阅读 · 0 评论 -
简单二叉树
二叉树模板 敲敲luogu P4715#include<iostream>#include<cstdio>#include<cmath> #include<cstring>#include<algorithm>#include<map>using namespace std;int n;int m[201];int tree[201];map<int,int> f;void bulid(int no原创 2020-12-20 12:42:26 · 52 阅读 · 1 评论 -
拓扑--高级版
奖金 拓扑排序+DP#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;int nn,m,kk;int f[201];bool r[201];int deg[201];int n[201],h[201],to[201],cnt;pair<int,int> s;//起点 queue<pair<i原创 2020-12-19 17:14:37 · 953 阅读 · 1 评论 -
拓扑--模板
拓扑排序 敲敲模板题目描述Description由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Yali Company总经理Mr.Z心情好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少。 于是Mr.Z下令召开m方会谈。每位参加会谈的代表提出了自己的意见:“我认为员工a的奖金应该比b高!”Mr.Z决定要找出一种奖金方案,满足各位代表的意见,且同时使得总奖金数最少。每位员工奖金最少为100元。Input两个整数n,m,表示员工总数和代表数;以下m行原创 2020-12-19 16:14:47 · 71 阅读 · 1 评论 -
dijkstra
dijkstra模板 敲敲#include<iostream>#include<cstdio>#include<cstring>#define ll long longusing namespace std;ll n,t,s;bool w[71];ll r[71][71];ll tt;ll dis[71];ll ans;ll maxx;ll e;int main(){ scanf("%d%d%d",&n,&t,&原创 2020-12-19 10:57:57 · 56 阅读 · 1 评论 -
SPFA
SPFA 模板#include<bits/stdc++.h>using namespace std;const int N=20001;int n,m,s,t;int head[N],next[N],to[N],v[N];int cnt;//第几条边 queue<int> w;bool r[N];int g;int dis[N];int past;void add(int a,int b,int c)//从a点去往b点 { cnt++; next[cnt原创 2020-12-18 21:22:37 · 78 阅读 · 1 评论