- 2024-05-29【模板】分裂合并 WBLT(自用)
#include<bits/stdc++.h>usingnamespacestd;#ifdefLOCAL#definedebug(...)fprintf(stderr,__VA_ARGS__)#else#defineendl"\n"#definedebug(...)void(0)#endifusingLL=longlong;template<intN>structwblt{intch[N<
- 2024-05-032024劳动节北斗课堂总结
第一天上午讲了数据结构平衡树(Treap)随机的笛卡尔树的期望深度是\(log_{n}\)。合并合并以\(x,y\)为根的\(Treap\)过程若\(x,y\)有一个为空,则返回另一个比较\(x,y\)的随机权值若\(x<y\)则递归合并\(x\)的左儿子和\(y\)。否则返回\(x\)和\(y\)的右儿子
- 2024-03-071277. 维护序列
#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;typedeflonglongLL;constintN=1e5+5;intn,m,P,a[N];structnod
- 2024-03-05243. 一个简单的整数问题2
#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;typedeflonglongLL;constintN=1e5+5;intn,m;LLa[N];structno
- 2024-01-31【模板】WBLT
todo:可持久化#include<bits/stdc++.h>usingnamespacestd;#ifdefLOCAL#definedebug(...)fprintf(stderr,##__VA_ARGS__)#else#definedebug(...)void(0)#endiftypedeflonglongLL;template<intN>structWBLT{staticconstexprdoublealph
- 2024-01-28线段树笔记
voidpushup(inttr){ seg[tr]=seg[tr*2]+seg[tr*2+1];}voidbuild(inttr,intl,intr){ if(l==r){ seg[tr]=a[r]; return; } intmid=(l+r)/2; build(tr/2,l,mid); build(tr/2,mid+1,r); pushup(tr);}voidpushdown(inttr,intl,intr){ if(pls[tr]==0)
- 2023-11-16线段树-多个懒标记pushdown
P3373【模板】线段树2这里需要用到两个懒标记,一个懒标记为add,记录加,另一个懒标记为mul,记录乘。我们需要规定一个优先级,然后考虑如何将懒标记下传。这里无非有两种顺序,一种是先乘后加,另一种是先加后乘。我们先看先加后乘。\[(sum+add1)*mul1\]当我们的懒标记$add2、
- 2023-09-28题解 [HEOI2016/TJOI2016] 排序
题目链接看到这道题按照套路首先想到二分答案(即二分\(q\)位置上的数,记作\(mid\))。再按照套路将大于\(mid\)的数字设为\(1\),将等于\(mid\)的数设为\(2\),小于\(mid\)的数字设为\(0\)。那么对于区间\([l,r,0]\)操作,应该先讲\(0,1,2\)的数量找出来,然后按照从小到大
- 2023-09-07线段树进阶
普通线段树核心在于上传标记(pushup)和下传标记(pushdown)以及懒标记的设计。P3373【模板】线段树2维护一个加法标记和乘法标记。下传标记时,将乘法标记更新加法标记。标记下传实现voidpushdown(intu,intl,intr){intmid=l+r>>1;tr[u<<1].val=(tr[u<<1].val*tr[
- 2023-08-28再遇 MySQL “一招必杀” Bug
TL;DR该Bug与DerivedConditionPushdownOptimization相关,从MySQL8.0.26引入,8.0.27和8.0.28仍受影响,直到MySQL8.0.29被修复。但是,MySQL8.0.29有其他致命缺陷,官网已经移除下载链接,建议升级到新版本MySQL8.0.33或MySQL8.0.34。问题现象该问题是vx群里的好
- 2023-07-13CF1290E Cartesian Tree 注意点--zhengjun
解题思路容易想到从小到大加数,维护每个点的子树大小。可转化为维护每个点为\(\max\)时的\([L,R]\)区间。然后需要写一个支持【区间+1】、【区间取min】、单点加入、全局查询。上个吉司机线段树即可。注意点吉司机线段树下推\(fi\)的标记的时候要注意\(fi\)的变化
- 2023-07-13SegmentTree2
线段树完全版关键词:延迟加载、懒标记LazyTag单点更新的情况比较简单。请看线段树基础版下面说说区间更新的情况。场景是这样的,还是刚刚的数,求区间的和。准备工作//rt:root#definelsonrt<<1#definersonrt<<1|1#definelen(r-l+1)//(l,r)区间的长度这次是区间更新
- 2023-06-05数据结构(4天)
带权并查集:维护一个数组,保存一个fa[x]与x之间的关系,路径压缩时直接要记得修改关系intfind(intx){if(fa[x]==x){returnfa[x];}introot=find(fa[x]);w[x]=f(w[x],w[fa[x]]);//关键fa[x]=root;returnfa[x];}对于区间修
- 2023-05-12杂题
P1438无聊的数列如果用上差分的思想,就变成了单点修改和区间查询,变得很容易写。但是我没有这样想,我直接暴力做,记两个懒标记k和d分别表示:该子树表示区间全部加上了首项是k,公差是d的等差数列。维护的时候pushdown都很容易写,但是调了很久。因为没注意到懒标记定义中的全部,也就是
- 2023-04-28P4681 [THUSC2015]平方运算 题解
题面链接简要题意给定一个序列,区间.map([](intx){x=x*x%p;});,区间求和。p给定,为小质数。\(N,M\le10^5\)。题解而把一个数看作一个点,向其平方取模连一条边,则最终必然构成一个基环森林,注意到\(P\)很小,每个数经过\(11\)次迭代之后就会进入环中。对于一个区间,如
- 2023-02-12关于pushdown函数
pushdown函数在在线段树平衡树等数据结构中极为常见,由于本蒟蒻在刚开始学的时候没有理解其的奥妙,于是准备将曾经的疑惑讲出来,也算是弥补了。首先,pushdown通常用于修改,最
- 2022-10-26又双叒叕写挂了啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
线段树别忘了pushdown并查集建议单独写merge,实在不写也一定要检查fa[getfa(x)]=getfa(y)是否有问题vector<char>纯属有饼,到现在还是233333qz同学的标签
- 2022-08-14Codeforces 121 E
感觉我数据结构有些弱,最近开始练习难道为2300~2700的数据结构题。首先我们发现,luckynumber不会太多,最多就是\((2^1+2^2+2^3+2^4+1)=31\)个(最后加\(1\)是对于所有\(x>7777