上一页 1 ··· 13 14 15 16 17
摘要: 动态开点线段树,只有需要用到一个点才新建该点,否则不进行构建,可以节省空间复杂度。 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)
摘要: 萌新蒟蒻初学OI,首次写博客(等待了半年555),无图勿喷。拜谢22222222dalao赐教markdown相关! 阅读全文
posted @ 2022-10-31 20:04 半步蒟蒻 阅读(126) 评论(5) 推荐(5)
上一页 1 ··· 13 14 15 16 17