常用模板总结
由于博主太菜,于是产生了这个偷懒用的东西这篇博客
毒瘤版快读
int read()
{
char ch=getchar();
int x=0;bool f=0;
while(ch<'0'||ch>'9')
{
if(ch=='-') f=1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return f?-x:x;
}
\(Dij\)
inline void dij(int s)
{
for(int i=1;i<=n;i++)
dis[i]=2147483645;
dis[s]=0;
q.push(make_pair(0,s));
while(!q.empty())
{
int now=q.top().second;
q.pop();
if(vis[now])continue;
vis[now]=1;
for(int e=head[now];e;e=edge[e].nxt)
{
int v=edge[e].to;
if(dis[now]+edge[e].dis<dis[v])
{
dis[v]=dis[now]+edge[e].dis;
q.push(make_pair(dis[v],v));
}
}
}
}
\(spfa\)
void spfa()
{ for(int i=1;i<=n;i++)
dis[i]=inf;
dis[s]=0;
vis[s]=1;
q.push(s);
while(!q.empty())
{int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=edge[i].next)
{ int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].dis)
{ dis[v]=dis[u]+edge[i].dis;
if(vis[v]==0)
{q.push(v);
vis[v]=1;
}
}
}
}
}
\(tarjan\)
void tarjan(int u)
{
tim++;
dfn[u]=tim;
low[u]=dfn[u];
sta[++top]=u;
vis[u]=1;
for(int e=head[u];e;e=edge[e].nxt)
{
int v=edge[e].to;
if(!dfn[v])
{
tarjan(v);low[u]=min(low[u],low[v]);
}
else if(vis[v])
low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
num++;
do
{
int v=sta[top];
vis[v]=0;
col[v]=num;
nd[num]+=a[v];
top--;
}while(sta[top+1]!=u);
}
}
\(矩阵乘法\)
void f()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
hp[i][j]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
hp[i][j]+=a[i][k]*b[k][j],hp[i][j]=(hp[i][j]+mod)%mod;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=hp[i][j]
}
被遗忘的ST表
int qry(int l,int r)
{
int qwq=log((double)(r-l+1))/log(2.0);
return max(st[l][qwq],st[r-(1<<qwq)+1][qwq]);
}
void st()
{
for(int i=1;(1<<i)<=n;i++)
{
for(int j=1;j<=n;j++)
{
st[j][i]=max(st[j][i-1],st[j+(1<<(i-1))][i-1]);
}
}
while(m--)
{
int l=read(),r=read();
printf("%d\n",qry(l,r));
}
}