• noip级别模板小复习


    不是很noip的知识点就不写了。

    dij什么的太easy就不写了。

    缩点

    • 注意(Tarjan)在缩边双和求强联通分量时候的区别。
    • 一个要判断是否在栈内一个不要。
    • 最后(topsort)(dp),或者记忆化搜索,但是一定要记得初值为(-1)
    • 考虑图不联通。

    负环

    • 考虑图不联通。
    • 一开始(dis=0),判断最短路长度大于(n)会好一些。
    • (dfs)(spfa)是指数级的。

    ST表

    • 注意是(i)(i+2^k-1)
    • 所以预处理的时候不要减1,因为已经减过了。查询的时候要加1因为要把减去的1去掉。
    Mx[j][i]=max(Mx[j-1][i],Mx[j-1][i+(1<<(j-1))]);
    printf("%d
    ",max(Mx[k][l],Mx[k][r-(1<<k)+1]));
    
    • (O(n))预处理(log)

    线性基

    • 用于查询多个数异或问题,本质是高斯消元,也可以用来解方程((flash)的考试题)。
    • 记得(1ll)线性基的值域与原数组的值域相同,且各个之间线性无关。
    • 如果要查询某个数,就是查找某个数是否可以由这(n)个数中任一个数异或得到。首
    • 从高到低扫这个数的每一位,如果这第(i)位为(1),就异或上(P_i),然后知道处理到最后一位。如果变成 (0) 了,那么就是可以的。
    • 查询第(k)大数。
    • 查询异或集合中k小值
    • 我们考虑改造一下线性基,使得每一位互相独立。
    • 如果(j<i),且(p_i)的第(j)位是(1),就把(p_i xor p_j)
    • 这样,对于二进制的每一位(i)。只有(p_i)这一位是(1),其他的都是(0)
    • 同样,这个线性基的本质也是没有改变的。
    • 我们查询的时候,将(k)进行二进制拆分,如果第(i)位是(1),就异或上线性基中第(i)个元素,最终得出的答案就是(k)小值。
    • 此外,需要对非满秩的矩阵进行特判。因为其存在(0)的结果,如果要求最小,那么就是(0)
    • 如果不是,那么就是求当前矩阵下的第((k-1))小。

    splay 区间反转

    • (lct)一样,注意栈序下放标记
    S[S[0]=1]=x;
    for(R i=x;fa[i];i=fa[i])S[++S[0]]=fa[i];
    while(S[0])push(S[S[0]--]);
    
    • 一定要记得先(find)到目标点再转到根而不是直接做。这里的(find)和整体二分是不一样的!
    push(x);
    if(k<=sz[ls])x=ls;
    else if(k==sz[ls]+1){spl(x,gl);return x;}
    else k-=(sz[ls]+1),x=rs;
    
    • 提醒几个常见小错误:
    void rot(R x){
        R y=fa[x],z=fa[y],k=son(x);
        ch[z][son(y)]=x,fa[x]=z;
        ch[y][k]=ch[x][k^1],fa[ch[x][k^1]]=y;
        ch[x][k^1]=y,fa[y]=x;upd(y);
    }
    
    • (rot)(upd(y)),而不是(upd(x)),如果都(upd)要先(y)(x),不要搞反。
    • 注意一开始要先记下来(x)是哪一个儿子,然后先拆开,再接起来。
    for(R y=fa[x];y!=gl;rot(x),y=fa[x])
        if(fa[y]!=gl)son(x)^son(y)?rot(x):rot(y);
    upd(x);if(!gl)rt=x;
    
    • 记得判断(y)(gl)的关系再决定转一次还是两次还是不转。
    • 一定记得更新(x)(rt)

    splay 普通平衡树

    • 每次打这个都像在做模拟题……。
    • 两个log的树状数组把一个log的splay掉起来打
    • treap只会过两个月现在早就忘了
    • 太麻烦了,还不如树状数组或者线段树。
    • 反正你又没有区间反转。
    • 太热了不写了咕咕

    树链剖分

    • 剖分之后一般是搞个线段树对(dfn)序维护。
    • 树上路径就暴力跳重链条,两个(log)
    • 子树信息就直接是(dfn)(dfn+sz-1)的连续区间,一个(log)
    • 如果是维护儿子信息就是(bfs) [SDOI2012]集合
    • 但是我不会啊,咕。

    倍增

    • 太普及了。

    左偏树

    • 可并堆,注意不能路径压缩。
    • 合并的时候根据堆的属性来判断,合并在右子树。
    • 然后强制向左偏,我的习惯是深度向左偏。
    • 记得更新(d_i=d_{rs}+1)
    • 删除元素就把两个儿子并起来。

    kmp

    • 核心思想是尝试匹配
    • (next)的时候是
    j=f[i-1];
    while(j>=0&&T[i]!=T[j+1])j=f[j];
    if(T[i]==T[j+1])f[i]=j+1;
    else f[i]=-1;
    
    • 也就是不断尝试能否接上一个新的后缀,否则就不断跳(next),直到为(-1)
    • 查询的时候是j=f[j-1]+1;,也就是往前走一个,再调(next),再往后走一个,也就是(j)失配,(j-1)配对好了,那么利用(j-1)(next),再往后走一个。

    AC自动机

    • 主要思想是(fail)树。
    • 先建好(trie),然后建(fail),然后每次匹配的时候都把(fail)的信息都收集一边。

    trie

    • 难道你会了(ac)自动机还不会(trie)??
    • 可持久化:和主席树差不多,序列就是相差,树上就是减去两倍(lca)
    • 启发式合并:和线段树启发合并差不多,也是一个(merge)

    最小生成树

    • 本来想补一下(B)算法。
    • 但是咕咕了。

    dinic

    • 记得当前弧优化,边从(2)开始。
    • 主要技巧在建图,后面都是板子。

    最小费用最大流

    • 同上。

    主席树

    • 动态开点,一般和别的数据结构结合在一起。
    • 序列右边继承左边,树上儿子继承父亲。

    点分治

    • 你家(noip)考点分治??咕咕。

    manacher

    • 记录最远到达的位置和中心。
    • 然后就知道了当前点的半径下界是对称过去的半径。
    • 然后暴力更新当前半径,更新最远距离和中心。

    模拟退火

    • 系统钟
    db Tim(){return (db)clock()/(db)CLOCKS_PER_SEC;}
    
    • 生成一个于(T)大小相关的随机,带正负。
    #define RD T*(rand()*2-RAND_MAX)
    
    • 接受更劣解的概率
    exp((ans-now)/T)*RAND_MAX>rand())
    
    • 注意,(now)是当前答案,(ans)是当前(sa)的最优解,记得保存全局最优解(bst)
    • 随机数组
    random_shuffle(x+1,x+n+1);
    

    CDQ

    • 每次强制计算跨过中点的贡献。

    kdtree

    • 注意替罪羊的重构方法。

    最小循环表示法

    • 今天才学。
    • 先倍长,初始时,让(i=0)(j=1)(k=0),其中(i)(j)(k)表示的是以(i)开头和以(j)开头的字符串的前k个字符相同。
    • 分为三种情况
    • 1.如果(str[i+k]==str[j+k]) (k++)
    • 2.如果(str[i+k] > str[j+k]) (i = i + k + 1),即最小表示不可能以(str[i->i+k])开头。
    • 3.如果(str[i+k] < str[j+k]) (j = j + k + 1),即最小表示不可能以(str[j->j+k])开头。
    • 那么只要循环(n)次,就能够判断出字符串的最小表示是以哪个字符开头。
    • 为什么当(str[i+k] > str[j+k]),(i=i+k+1),最小表示不可能以(str[i->i+k])开头,让我们来举个栗子。
    • 如下图,当(i=1)(j=5)(k=3)时,(str[i+k] > str[j+k])
    • 首先有(S1S2S3 == S5S6S7)(S4 > S8)
    • 那么以字符(S2)开头肯定不如以字符(S6)开头更优,因为(S4 > S8)啊。

    莫队

    • 太热了不写了。
  • 相关阅读:
    摄像头bug查找工作总结
    高通camera结构(摄像头基础介绍)
    什么是滤波器,滤波器是干嘛用的,IIR和FIR滤波器又是什么?(回答请简洁,别浪费大家时间)
    详解摄像头各个引脚的作用关系
    Camera帧率和AE的关系
    CMOS Sensor的调试经验分享
    VSYNC与HSYNC与PCLK与什么有关系
    PCLK怎么获得?
    高清摄像头MIPI接口与ARM处理器的连接
    常用正则
  • 原文地址:https://www.cnblogs.com/Tyher/p/9940827.html
Copyright © 2020-2023  润新知