模板總結 不定期更新

2022-05-19 04:45:09 字數 3876 閱讀 3213

這裡會掛一些自己認為很重要的模板,沒理解的就沒有注釋了,等理解了就更
快速排序(簡單分治思想,時間複雜度從\(o_(n\log)\)~\(o_(n^2)\)不等,及其不穩定)

\(code:\)

#includeusing namespace std;

long long a[100001],n;

void qs(int l,int r)

if(li)qs(i,r);

}int main()

qs(1,n);

for(int i=1;i<=n-1;i++)

cout《題目鏈結

歸併排序(分治思想,時間複雜度穩定在\(o_(n\log)\))

\(code:\)

#include#define ll long long

using namespace std;

const int maxn=5e5+1;

inline int read()

int n;

int a[maxn],tmp[maxn];

void ms(int l,int r)

while(i<=mid)tmp[cnt]=a[i],i++,cnt++;

while(j<=r)tmp[cnt]=a[j],j++,cnt++;

for(i=l;i<=r;++i)a[i]=tmp[i];

return;

}

int main()

單源最短路徑:

\(spfa\)(死了的那個,時間複雜度\(o_(km)\)~\(o_(nm)\),不被卡就會跑得飛快)

\(code:\)

const int maxn=1e5+5,maxm=5e5+5;

queue< int > q;

struct edgee[maxm<<1]

int head[maxn],dis[maxn],v[maxn];

void spfa(int s)}}

return;

}

\(dijkstra\)(沒有\(spfa\)的時候要堅強,多寫寫堆優化,時間複雜度\(o_((n+m)\log)\))

\(code:\)

const int maxn=1e5+5,maxm=5e5+5;

priority_queue< pair< int , int > > q;

struct edgee[maxm<<1]

int head[maxn],dis[maxn],vis[maxn];

void dijkstra(int s)}}

return;

}

\(prim + priority queue\)(時間複雜度為\(o_(m\log)\),稠密圖上表現較優)

\(code:\)

const int maxn=5005,maxm=2e5+5;

priority_queue< pair< int , int > > q;

struct edgee[maxm<<1];

int n,m,cnt,ans,tot;

int head[maxn],dis[maxn],vis[maxn];

void prim()

} }return;

}

\(kruskal\)(時間複雜度為\(o_(m\log+m\alpha(n))\))

\(code:\)

#define re register

const int maxn=5005,maxm=2e5+5;

struct edgee[maxm];

int n,m,pd=1;

int f[maxn];

bool cmp(edge x,edge y))\),稠密圖上表現較優)

\(code:\)

const int maxn=5005,maxm=2e5+5;

priority_queue< pair< int , int > > q;

struct edgee[maxm<<1];

int n,m,cnt,ans,tot;

int head[maxn],dis[maxn],vis[maxn];

void prim()

} }return;

}

\(kruskal\)(時間複雜度為\(o_(m\log+m\alpha(n))\))

\(code:\)

#define re register

const int maxn=5005,maxm=2e5+5;

struct edgee[maxm];

int n,m,pd=1;

int f[maxn];

bool cmp(edge x,edge y)

return;

}int sum(int x)

return ans;

}

線段樹:

\(code:\)

#include#define ll long long

#define lc(x) (x<<1)

#define rc(x) (x<<1|1)

#define midd ((l+r)>>1)

using namespace std;

const int maxn=1e5+5;

inline int read()

ll sum[maxn<<2],tagm[maxn<<2],taga[maxn<<2],a[maxn];

int n,m;

ll ha;

void push_up(int p)

void build(int p,int l,int r)

int mid=midd;

build(lc(p),l,mid);build(rc(p),mid+1,r);

push_up(p);

return;

}void push_down(int p,int l,int r)

void update_mul(int p,int l,int r,int cl,int cr,int k)

void update_add(int p,int l,int r,int cl,int cr,int k)

ll ask(int p,int l,int r,int al,int ar)

int main()

}return 0;

}

亂入乙個分塊2333

#define ll long long

#define re register

void build()

void update(int le,int ri,int d)

for(re int i=le;i<=r[x];++i)a[i]+=d,sum[x]+=d;

for(re int i=l[y];i<=ri;++i)a[i]+=d,sum[y]+=d;

for(re int i=x+1;i<=y-1;++i)tag[i]+=d,sum[i]+=d*(r[i]-l[i]+1);

return;

}ll query(int le,int ri)

if(tag[y])

if(x==y)

for(re int i=le;i<=r[x];++i)ans+=a[i];

for(re int i=l[y];i<=ri;++i)ans+=a[i];

for(re int i=x+1;i<=y-1;++i)ans+=sum[i];

return ans;

}

不定期更新部落格

也算是乙個真正程式設計生涯的起點,聽說大神都有自己的部落格。csdn部落格主要是作為乙個詳細的記錄場所,類似log的verbose檔,細緻入微,無孔不入,因此可能更新頻率較高,質量也相對較低。我的意思是將csdn這裡的部落格作為日後更加精煉的部落格 比如個人blog站或者github pages 的...

C STL 不定期更新

一 set set的特性是,所有元素都會根據元素的鍵值自動排序,set的元素不像map那樣可以同時擁有實值 value 和鍵值 key set元素的鍵值就是實值,實值就是鍵值。set不允許兩個元素有相同的鍵值。include初始化 int arr 5 set iset arr,arr 5 或者只定義...

程式設計細節總結(不定期更新)

最近總是犯一些奇奇怪怪的小錯誤,忍無可忍,總結如下 不定期更新,看我的犯錯頻率了qwq 1.線段樹初始化盡量將所有引數初始化好 留下個add沒初始化,出了問題半天查不出來 2.樹剖中,兩點往上跳時交換兩點順序的條件不是基於兩點本身深度的比較,而是基於兩點所在鏈頂點深度的比較 調了三個晚上,看了以前的...