這裡會掛一些自己認為很重要的模板,沒理解的就沒有注釋了,等理解了就更
快速排序(簡單分治思想,時間複雜度從\(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.樹剖中,兩點往上跳時交換兩點順序的條件不是基於兩點本身深度的比較,而是基於兩點所在鏈頂點深度的比較 調了三個晚上,看了以前的...