• 知识点整理-数据结构


    一、数据结构

    1.DFS序:访问一棵有根树时DFS访问结点的顺序。设树结点个数为(n)
    ❤(1)入栈序:设将访问的结点依次存到一个栈中,结点入栈的顺序。
    ❤(2)出栈序:结点出栈的顺序。
    →入、出栈序的长度均为(n)
    ❤(3)欧拉序:沿着边走,经过的结点的顺序。
    →长度为(2n-1)。欧拉序中相邻的点在树上一定相邻。

    2.STL set
    ❤(1)set<Typename> S声明集合,存储类型为Typename的元素。
    ❤(2)S.insert(x)插入元素x
    ❤(3)S.erase(x)删除元素x,若未找到x则什么也不做。
    ❤(4)S.size(x)返回集合元素数量;S.empty()返回集合是否为空。
    ❤(5)set<Typename>::iterator i声明迭代器。
    →迭代器的作用:通过它遍历集合中的所有元素。相当于for(int i=1;i<=n;i++)中的i。它支持operator++operator--以访问集合中的下/上一个元素。我们可以通过for(set<Typename>::iterator i=S.begin();i!=S.end();i++)for(auto i:S)来遍历set中的所有元素。注意直接使用时(也就是for循环内部)要通过解引用运算符*i,i->来访问元素本身。
    ❤(6)(i=)S.upper_bound(x),S.lower_bound(x)二分查找大于/大于等于x的第一个元素,返回迭代器。
    ❤(7)(i=)S.find(x)找寻x并返回它的迭代器,若为找到则返回末尾迭代器S.end()

    3.ST表求LCA
    ❤(1)求树的欧拉序,设待求两点(u,v)在欧拉序第一次出现的位置为(P_u,P_v)
    ❤(2)在欧拉序的子段[P_u,P_v]上找到一个欧拉序最小的点,它即是(LCA(u,v))
    ❤(3)因此我们可以通过ST表求出[P_u,P_v]中最小的值。

    4.2-Pointer
    问题:给定一个升序数列(A),求其中的两个数字是它们的和为给定的数(x)
    ❤(1)设l,r(A)的头指针和尾指针。
    ❤(2)若A[l]+A[r]>x,则r向左移,否则l向右移。
    重复这一步,知道找到A[l]+A[r]=x。可以证明,如果存在一组解,那么它一定能找出来。

    练习题:洛谷P1106,P1638,SP1805.

  • 相关阅读:
    android 项目
    input keyevent 数字对应的操作
    logcat 使用方法
    android查看内存使用情况
    图片点击放大效果
    禁止img图片拖动在新窗口打开
    人工智能
    游戏开发
    随手做的一个模拟弹出窗口
    Html的<meta>标签使用方法及用例
  • 原文地址:https://www.cnblogs.com/jiangyuechen/p/13436016.html
Copyright © 2020-2023  润新知