摘要:
动态开点线段树,只有需要用到一个点才新建该点,否则不进行构建,可以节省空间复杂度。 class SegmentTree{ struct tree{ int l,r,sz; }t[N<<2]; int tot,s[N<<2],root[N],rtc=1,L=-1e7,R=1e7; #define l( 阅读全文
posted @ 2022-11-14 17:40
半步蒟蒻
阅读(177)
评论(0)
推荐(0)
摘要:
对于多次询问,vis[]等可以不用memset,可用标号法以节省时间 whlie(q--){ for(int i=l;i<=r;i++) if(vis[a[i]]!=q)ans++,vis[a[i]]=q; } 手动开O2 #pragma GCC optimize(2) 矩形判断相交 inline 阅读全文
posted @ 2022-11-14 17:40
半步蒟蒻
阅读(43)
评论(1)
推荐(0)
摘要:
tarjan求无向图割点,若x是根节点,则子树个数>1时x时割点;若x是非根节点,当ipt[x]<=low[y]时x是割点,说明y的子树无法通过非父子边回溯到x的祖先,那么删掉x,图将分裂成两个字图,即x是割点。 void tarjan(int x,int root){ ipt[x]=low[x]= 阅读全文
posted @ 2022-11-14 17:37
半步蒟蒻
阅读(199)
评论(0)
推荐(2)
摘要:
链式栈 template<class T> class Stack{ struct Link{ Link(){data=0;p=nullptr;} Link(const T&n,Link*np=nullptr){data=n;p=np;} T data; Link*p; }; Link*tp; un 阅读全文
posted @ 2022-11-14 17:17
半步蒟蒻
阅读(43)
评论(1)
推荐(0)
摘要:
并查集本质上是维护一个森林,初始时森林里每个点是一个集合,之后将集合合并,查找一个点所在集合的代表元素,将两个集合的代表元素进行合并。使用时不要忘记初始化! 在一般情况下,可以使用路径压缩与按秩合并或启发式合并。 struct DSU{ int f[N<<1],sz[N<<1],rk[N]; inl 阅读全文
posted @ 2022-11-14 16:47
半步蒟蒻
阅读(44)
评论(2)
推荐(0)
该文被密码保护。 阅读全文
posted @ 2022-11-14 14:23
半步蒟蒻
阅读(0)
评论(0)
推荐(0)

浙公网安备 33010602011771号