一些基础算法的模板(持续更新)

海鸥派OpenEuler开发板实战:从烧写到SSH连接的完整指南 本文提供海鸥派OpenEuler开发板从开箱到SSH远程连接的完整实战指南。详细介绍了基于海思SD3403/SS928芯片的算力开发板系统烧写、存储扩容、网络配置等关键步骤,帮助开发者快速上手这款AI边缘计算设备,并实现高效的远程开发与管理。 阅读详情

更新中

//Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft
//To be continued...

//Suffix Automation
char str[N];  
int s[N][26],mx[N],f[N],sz[N];  
int last=1,cnt=1,n,v[N],r[N],ans=0;   
inline int extend(char c){  
    int p=last,np=last=++cnt,q,nq;  
    c-='a'; mx[np]=mx[p]+1; sz[np]=1;  
    for(;p&&!s[p][c];p=f[p]) s[p][c]=np;  
    if(!p) return f[np]=1;  
    q=s[p][c];  
    if(mx[p]+1==mx[q]) f[np]=q;  
    else {  
        nq=++cnt;  
        mx[nq]=mx[p]+1;  
        f[nq]=f[q]; f[q]=f[np]=nq;  
        memcpy(s[nq],s[q],26<<2);  
        for(;p&&s[p][c]==q;p=f[p]) s[p][c]=nq;  
    }  
}  
int build(){  
    scanf("%d%s",&n,str);  
    for(int i=0;i<n;++i) extend(str[i]);  
    for(int i=1;i<=cnt;++i) ++v[mx[i]];  
    for(int i=1;i<=n;++i) v[i]+=v[i-1];  
    for(int i=cnt;i;--i) r[v[mx[i]]--]=i;  
    for(int p,i=cnt;i;--i) sz[f[r[i]]]+=sz[r[i]];   
}  

//String Hash
#define BASE 27
#define LL long long
char s[N]; LL h[N],bas[N];
LL gH(int l,int r){ return h[r]-h[l-1]*bas[r-l+1]; }
void init_hash(){
	for(int i=1;i<=n;++i){ 
		bas[i]=bas[i-1]*BASE;
		h[i]=h[i-1]*BASE+s[i]-'a';
	}
}

//Suffix Array (using hash)
#define BASE 27
#define LL long long
char s[N]; LL h[N],bas[N]; int sa[N],r[N],H[N];
LL gH(int l,int r){ return h[r]-h[l-1]*bas[r-l+1]; }
void init_hash(){
	for(int i=1;i<=n;++i){ 
		bas[i]=bas[i-1]*BASE;
		h[i]=h[i-1]*BASE+s[i]-'a';
	}
}
inline bool cmp(int x,int y){
	int l=-1,r=n-max(x,y);
	for(int m;l<r;){
		m=l+r+1>>1;
		if(gH(x,x+m)==gH(y,y+m)) l=m;
		else r=m-1;
	}
	return s[x]<s[y];
}
void buildSa(){
	init_hash();
	for(int i=1;i<=n;++i) sa[i]=i;
	sort(sa+1,sa+1+n,cmp);
	for(int i=1;i<=n;++i) r[sa[i]]=i;
	for(int i=1,j,k=0;i<=n;H[r[i++]]=k){
		if(k) --k;
		if(r[i]>1) for(j=sa[r[i]-1];s[i+k]==s[j+k];++k);
	}
}

//KMP & ExtendedKMP
int nt[N];
void KMP(char* s,char* c,int& t,int* ans){
	int n=strlen(c+1),m=strlen(s+1);
	for(int i=1,j;i<n;++i)
		for(j=i;j;)
			if(c[j=nt[j]]==c[i]) { nt[i+1]=j+1; break; }
	for(int i=0,j=0;i<m;++i){
		if(j<n && s[i]==c[j]) ++j;
		else while(j) if(c[j=nt[j]]==s[i]){ ++j; break; }
		if(j==n) ans[++t]=i-n+1;
	}
}

//Trie
//manacher
//Tarjan Algorithm
struct Edge{ int u,v,nt; } G[1000010];
int c=1,h[500010],dfn[500010],clk=0,Col=0;
int n,m,low[500010],col[500010],d[500010];
bool b[1000010];
inline void adj(int x,int y){
	G[++c]=(Edge){x,y,h[x]}; h[x]=c;
	G[++c]=(Edge){y,x,h[y]}; h[y]=c;
}
void tarjan(int u,int v){
	clk++; low[v]=dfn[v]=clk;
	for(int w,i=h[v];i;i=G[i].nt)
		if((w=G[i].v)!=u){
			if(!dfn[w]){
				tarjan(v,w);
				if(low[w]==dfn[w] || low[w]>dfn[v]){ b[i]=1; b[i^1]=1; }
				else low[v]=min(low[v],low[w]);
			} else low[v]=min(low[v],dfn[w]);
		}
}
void dfs(int x,int u,int Cl){
	col[x]=Cl;
	for(int v,i=h[x];i;i=G[i].nt)
		if((v=G[i].v)!=u&&!b[i]&&!col[v]) dfs(v,x,Cl);
}
int main(){
	scanf("%d%d",&n,&m);
	for(int x,y,i=0;i<m;++i){
		scanf("%d%d",&x,&y);
		adj(x,y);
	}
	tarjan(0,1);
	for(int i=1;i<=n;++i) 
		if(!col[i]) dfs(i,0,++Col);
}
//Dijkstra+Heap
struct Node{ int d,id; } x;
struct Edge{ int v,c,nt; } G[100010];
int h[10010],d[10010];
inline bool gmin(int& a,int b){ return a>b?(a=b)|1:0; }
inline bool operator < (Node a,Node b){ return a.d>b.d; }
void dijk(int s){
	priority_queue<Node> q;
	d[s]=0; q.push((Node){0,s});
	for(int u;!q.empty();){
		x=q.top(); q.pop();
		if(d[u=x.id]<x.d) continue;
		for(int v,i=h[u];i;i=G[i].nt)
			if(gmin(d[v=G[i].v],d[u]+G[i].c)) q.push((Node){d[v],v});
	}
}
//Floyd
int f[N][N];
void Floyd(int n){
	for(int k=1;k<=n;++k)
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j)
				f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
}
//ISAP Maxflow
//mincost maxflow
//Kuskral & Prim
//multiplication Lca
struct Tree{
	Edge G[N<<1]; 
	int h[N],d[N],f[18][N],cnt;
	inline void adj(int x,int y){ 
		G[++cnt]=(Edge){x,y,h[x]}; h[x]=cnt; 
		G[++cnt]=(Edge){y,x,h[y]}; h[y]=cnt; 
	}
	void dfs(int x,int p){
		d[x]=d[p]+1; f[0][x]=p;
		for(int j=1;j<18;++j)
			f[j][x]=f[j-1][f[j-1][x]];
		for(int v,i=h[x];i;i=G[i].nt)
			if((v=G[i].v)!=p) dfs(v,x);
	}
	void build(){ dfs(1,0); }
	void swim(int& x,int d){
		for(int i=0;d;++i,d>>=1) if(d&1) x=f[i][x]; 
	}
	int gLca(int x,int y){
		if(d[x]>d[y]) swap(x,y);
		LL x1=0,x2=0;
		swim(y,d[y]-d[x]);
		if(x==y) return x;
		for(int j=17;;){
			for(;~j&&f[j][x]==f[j][y];--j);
			if(j<0) return f[0][x];
			x=f[j][x]; y=f[j][y];
		}
	}
} T;

//Tree chain partition 
struct Edge{ int v,nt; } G[N];
int h[N],d[N],top[N],sz[N],son[N];
int f[N],w[N],v[N<<2],n,m,cnt=0,clk=0;
inline void adj(int x,int y){ G[++cnt]=(Edge){y,h[x]}; h[x]=cnt; }
void dfs(int x){
	d[x]=d[f[x]]+1; sz[x]=1;
	for(int v,i=h[x];i;i=G[i].nt){
		dfs(v=G[i].v);
		sz[x]+=sz[v];
		if(sz[v]>sz[son[x]]) son[x]=v;
	}
}
void dt(int x,int p){
	w[x]=++clk; top[x]=p;
	if(son[x]) dt(son[x],p);
	for(int v,i=h[x];i;i=G[i].nt)
		if((v=G[i].v)!=son[x]) dt(v,v);
}
int gLca(int x,int y){
	for(;top[x]!=top[y];y=f[top[y]])
		if(d[top[x]]>d[top[y]]) swap(x,y);
	if(d[x]>d[y]) swap(x,y);
	return x;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int x,i=2;i<=n;++i){
		scanf("%d",&x);
		adj(x,i); f[i]=x;
	}
	dfs(1); dt(1,1);
	for(int x,y,c;m--;){
		scanf("%d%d%d",&x,&y);
		gLca(x,y);
	}
}	

//dfs alignment
//Link cut Tree
//disjoin Set (dsu)
int p[N];
inline void init(){
	for(int i=0;i<N;++i) p[i]=i;
}
inline int gFa(int x){ return x==f[x]?x:f[x]=gFa(f[x]); }

//powermod && gcd && extend-gcd
#define L long long
inline L pow(L x,L k,L M,L s=1){
	for(;k;x=x*x%M,k>>=1) if(k&1) s=s*x%M;
	return s;
}

inline int gcd(int a,int b){
	for(int c;b;a=b,b=c) c=a%b;
	return a;
}

inline int exgcd(int a,int b,int& x,int& y){
	if(b){
		int r=exgcd(b,a%b,y,x);
		y-=x*(a/b); return r;
	} else { x=1; y=0; return a; }
}

//Distratic log
#define L long long
map<L,int> rec;
int dislog(int x,int n,int M){ //x^dislog(x,n)=n(MOD M)
	if(x==0) return -1;
	if(n%M==1) return 0;
	L c=1,mul;
	int sq=sqrt(M);
	for(;(L)sq*sq<=M;++sq);
	for(int i=1;i<=sq;++i){
		rec[c]=i;
		c=c*x%M;
	}
	mul=c; c=1;
	for(int i=0;i<sq;++i){
		L m=(L)n*pow(c,M-2);
		if(rec[m]) return (rec[m]+i*sq)%M;
		c=c*mul%M;
	}
	return -1;
}

//Miller Rabin
bool test(int n,int a,int d){
	if(n==2 || n==a) return 1;
	if(~n&1) return 0;
	for(;~d&1;d>>=1);
	int t=pow(a,d,n);
	for(;(d!=n-1)&&(t!=1)&&(t!=n-1);d<<=1) t=(L)t*t%n;
	return (t==n-1)||(d&1);
}
bool miller_rabin(int x){
	if(x<2) return 0;
	int a[5]={2,3,61,101,10007}; //testing set
	for(int i=0;i<5;++i) if(!test(n,a[i],n-1)) return 0;
	return 1;
}

//linearity sieve for Prime & miu & phi
int w[N],t; bool vis[N];
int phi[N],miu[N];
void get_prime(int n){
	phi[1]=miu[1]=1;
	for(int i=2;i<=n;++i){
		if(!vis[i]){
			w[++t]=i;
			phi[i]=i-1;
			miu[i]=-1;
		}
		for(int j=1;j<=t&&i*w[j]<=n;++j){
			vis[i*w[j]]=1;
			if(i%w[j]==0){
				miu[i*w[j]]=0;
				phi[i*w[j]]=phi[i]*w[j];
				break;
			}
			miu[i*w[j]]=-miu[i];
			phi[i*w[j]]=phi[i]*(w[j]-1);
		}
	}
}

//Segment Tree
//ZKW segment Tree (Use as Binary search tree)
struct ZKW{
	int n,M,s[N<<2];
	void init(int N):n(N){
		for(M=1;M<=n;M<<=1); --M;
		for(int i=M+1;i<=M+n;++i) s[i]=1;
		for(int i=M;i;--i) s[i]=s[i<<1]+s[i<<1|1];
	}
	inline int count(int x){ return s[x+M]; }
	inline void insert(int x){ for(x+=M;x;x>>=1) ++s[x]; }
	inline void remove(int x){ for(x+=M;x;x>>=1) --s[x]; }
	inline int rank(int x,int r=1){ for(x+=M;x;x>>=1) if(x&1) r+=s[x^1]; return r; }
	inline int pre(int x){
		for(x+=M;x;x>>=1)
			if((x&1)&&s[x^1]){
				for(--x;x<=M;x=(s[x<<1|1]?x<<1|1:x<<1));
				return x-M;
			}
		return -1;
	}
	inline int suc(int x){
		for(x+=M;x;x>>=1)
			if((~x&1)&&s[x^1]){
				for(++x;x<=M;x=(s[x<<1]?x<<1:x<<1|1));
				return x-M;
			}
		return -1;
	}
	inline int kth(int k){
		for(int x=1;x<=M;)
			if(s[x<<1]>=k) x=x<<1;
			else { k-=s[x<<1]; x=x<<1|1; }
		return x-M;
	}
};

//Segment Tree Merging
//Persistence Segment Tree
//fenwick tree
int s[N],n;
inline void add(int x,int k){ for(;x<=n;x+=x&-x) s[x]+=k; }
inline int sum(int x,int S=0){ for(;x;x&=x-1) S+=s[x]; return s; }

//ST list
int st[20][N],n,val[N],lg[N]={-1};
inline int f(int x,int y){ return; } //f is a function like min or gcd
void init(){
	for(int i=1;i<=n;++i) st[0][i]=val[i],lg[i]=lg[i-1]+!(i&(i-1));
	for(int i=n;i;--i)
		for(int j=1;(i+(1<<j)-1)<=n;++j)
			st[j][i]=f(st[j-1][i],st[j-1][i+(1<<j-1)][j-1]); 
}
int query(int l,int r){
	int k=lg[r-l+1];
	return f(st[k][l],st[k][r-(1<<k)+1][k]);
}

//preffix Sum
//Matrix power-mod
struct Mat{
	int n,m;
	int s[16][16];
	Mat(){ memset(s,0,sizeof s); }
	void clr(){ memset(s,0,sizeof s); }
	void set(int x,int y){ n=x; m=y; }
	Mat operator * (const Mat& b){
		Mat c; c.set(n,b.m);
		for(int i=0;i<n;++i)
			for(int j=0;j<b.m;++j)
				for(int k=0;k<m;++k)
					c.s[i][j]=(c.s[i][j]+(L)s[i][k]*b.s[k][j])%M;
		return c;
	}
} a,b;
void pow(int k){
	for(;k;b=b*b,k>>=1) if(k&1) a=a*b;
}
int main(){
	a.set(1,N); b.set(N,N);
	for(int i=0;i<N;++i)
		for(int j=0;j<N;++j)
			b.s[i][j]=_________;
	pow(n);
}

//Treap
//Splay

基于STM32、HAL库的WF162A 11BA T&R气压传感器 驱动程序设计 / 转换为7位地址。* @param temperature: 存储读取到的温度值(°C)* @param temperature: 存储读取到的温度值(°C)* @param pressure: 存储读取到的压力值(bar)* @param pressure: 存储读取到的压力值(bar)* @param range: 压力范围(bar) 阅读详情

相关推荐

从零到一:RagFlow源码架构深度解析与二次开发实战指南

本文深入解析RagFlow源码架构,提供从环境搭建到二次开发的全流程实战指南。作为企业级AI搜索框架,RagFlow通过模块化设计和多模态处理能力,支持自定义智能体开发与文搜文档功能,帮助开发者高效构建智能搜索系统。

w1x2y3的博客 266

基础算法模板

Acwing算法基础笔记

weixin_57342745的博客 511

数据去重复_京东商品评论情感分析|文本数据预处理

本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据,对其作情感分析,显然没有价值,得出的文本挖掘结果也不尽人意。所以对于文本评论数据先进行文本预处理是必不可少的一步,把大量的、冗余的、无价值的信息去除,可以极大提高文本数据的质量,精确文本分析结果。1 文本去重1.1文本去重的原因文本数据预处理时,首先应去除文本评论数据中反...

weixin_34556808的博客 2073

基础算法模板(C++)

【代码】基础算法模板(C++)

qq_73802975的博客 1163

OpenClaw Browser Relay Extension 鉴权失败与 invalid handshake 问题的终极解决方案

在使用 OpenClaw 浏览器插件 (Browser Relay Extension) 时,许多用户可能会遇到两个主要问题:一是配置端口错误导致的连接失败,二是鉴权失败 (Gateway token rejected)。本文将详细解析这两个问题并提供解决方案。

gerryke的blog 5556

Qt上位机实战:5步搞定STM32 IAP固件升级(附拖拽文件处理技巧)

本文详细介绍了如何使用Qt开发STM32 IAP固件升级上位机。通过五个核心步骤,包括理解IAP机制、搭建Qt环境、实现拖拽文件加载、封装串口通信以及设计可靠通信协议,帮助开发者快速构建一个稳定、易用且支持图形化操作的固件升级工具,显著提升嵌入式产品开发与维护效率。

ss78901的博客 1070

基础算法模板目录汇总(很全!!)

快速排序 public static void quick_sort(int l, int r, int [] b){ if(l >= r )return; int i = l - 1, j = r + 1, x = b[l]; while( i < j){ do{ ++i; }while(b[i] < x); do{ --j; }while(b[j] > x); if(i &

JohnnyLin 1583

2023年5月青少年软件编程Python等级考试四级真题(含答案和解析)

电子学会,2023年5月,青少年软件编程,Python等级考试,四级真题(含答案和解析)

m0_37554648的博客 903

基础算法常用模板(一)

【代码】基础算法常用模板(一)

m0_52208706的博客 166

华为OD机试真题 C 实现【水库蓄水问题】【2022.11 Q4 新题】

给定一个长度为 n 的整数数组height。数组的元素表示山的高度,选择两个元素作为水库的边界,求蓄水量的最大值并输出蓄水量最大时的边界下标(蓄水量相同时输出下标较近的)。

MISAYAONE的博客 1万+

timing window file中的S L T指什么意思

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 771

基础算法模板汇总(大全)

有高精度,深搜,广搜,排序,前缀和,差分,离散化,二分

m0_54615144的博客 229

CANoe:入门介绍

CANoe网络通信分析:CANoe用户可以在台架上或者车辆中分析ECU和整个系统的多总线通信。Trace窗口:用于列出所有总线活动,例如消息或错误帧。对于每条消息,都可以显示单独的信号值Graphics窗口:用于在时间轴上以图形方式在线显示消息和诊断请求中传输的值,例如rpm或温度值Statistics窗口:用于显示有用的网络和节点统计信息,例如节点和帧级别的总线负载、突发计数器/持续时间、帧和错误的计数器/速率、控制器状态Data窗口:用于显示预选数据,例如数字或条形图数据。

jasonj333 9742

[蓝桥杯Python]算法练习、算法基础、算法训练、算法模板(持续更新)

[蓝桥杯Python]算法练习、算法基础、算法训练、算法模板(持续更新)

Callme_TeacherPi 6105

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数据结构算法各种基础模板 ---- C++版本(持续更新中)

本文涵盖了数据结构各种基础模板代码以及对应例题,目的是为了所有人能查阅并使用模板,整理不易,觉得好用请给个赞和留下评论。

weixin_47672698的博客 1006

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

《落实算法安全主体基本情况》 +《自评估报告》+《拟公示内容》 各2份 一共6份

在数字化飞速发展的今天,算法安全已经成为各行业关注的焦点。我们深知您在算法安全领域的探索和研究之需,特为您精心准备了6篇极具专业性的模板范例,旨在为您在这个领域的研究提供有力的支持。一、对照使用我们深知算法安全领域的专业性和复杂性,因此特别推出了这些范例,以供您对照使用。通过对比分析,您可以更深入地理解算法安全的各个方面,从而更好地应对实际工作中遇到的问题。二、专业性强、审核严格这几篇范例具有极高的专业性,经过不断的优化,确保了内容的准确性和权威性。

A_991128a的博客 689

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

AcWing算法基础课笔记1(持续更新)

自制AcWing算法基础课笔记,跟着课程视频做的,其中有一些自己学习过程中的思考

weixin_46695464的博客 2086

ACM算法模板总结(分类详细版)

本文模均引用于y总的算法模板,网址:AcWing (本文属于持续更新ing.......)

wait 2万+

算法模板持续更新

基础算法 排序 二分 高精度 前缀和与差分 双指针算法 位运算 离散化 区间合并数据结构 链表与邻接表:树与图的存储 栈与队列:单调队列、单调栈 kmp Trie 并查集 堆 Hash表搜索与图论 DFS与BFS 树与图的遍历:拓扑排序 最短路 最小生成树 二分图:染色法、匈牙利算法数学知识 质数 约数 欧拉函数 快速幂

weixin_60569662的博客 769

各种算法模板

*

weixin_46377148的博客 1061

算法与数据结构模版(AcWing算法基础课笔记,持续更新中)

AcWing算法基础课笔记 第一章 基础算法 包括排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并 1. 排序 快速排序: 思路:基于分治思想 确定分界点(取左边界,去中间点,随机取) 调整区间,分<x与>x两部分分别是[l, j]、[j+1, r] 递归左右 void quick_sort(vector<int>&q, int l, int r) { if (l >= r) return; //注意这里是>= int

emmmnmm的博客 2372

算法模板总结(持续更新

二分查找 // 二分查找的最基础和最基本的形式 int binarySearch(int[] nums, int target){ if(nums == null || nums.length == 0) return -1; int left = 0, right = nums.length - 1; while(left <= right){ // Prevent (left + right) overflow int mid = left + (right

寅贝勒的博客 4008

算法模板合集(持续更新)

时间复杂度O((n+m)logm)

lqc_white的博客 163

自用 - J算法 - 模板(持续更新!)

ps:陆续更新!

weixin_43863957的博客 332

学习记录:C++常用模板(不定期持续更新)

望大佬指正Orz

TaopiTTT的博客 3222
上一篇: Jzoj4787 数格子
下一篇: Jzoj4788 序列
扩展的灰
博客等级 码龄12年 60粉丝 342原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值