zoukankan      html  css  js  c++  java
  • ABC223

    ABC223

    A

    签到

    B

    签到

    C

    预处理出从前面烧完第(i)个,从后面烧完第(j)个的时间

    找到在哪里碰头,然后模拟一下

    D

    开优先队列,把所有没有入度的点都丢进去,每次取最小

    E

    先考虑只有两个矩形的情况:

    肯定可以用一条平行于坐标轴的直线将两个矩阵分到两个互不相交的部分

    一般地认为这条直线平行于(y)

    只要让第一个矩形的高最大,让第一条直线贴着第一个矩形放置,判断第二个矩形能否放入右侧区域

    推广到三个矩阵,同样可以证明,至少有一条平行于坐标轴的直线将三个矩阵划分到两个不相交的区域,其中一个区域有三个矩阵,一个区域有两个矩阵

    枚举被划分出的一个矩阵,判断另一部分区域能否放入两个矩阵

    F

    设左括号为(+1),右括号为(-1),考虑一段区间是合法的充要条件:

    (1)区间和为(0)

    (2)区间前缀和最小值为(0)

    这两个信息分别可以用线段树维护,对前缀和数组建一颗线段树

    然后考虑修改操作,交换两个位置的括号

    (1)如果两个位置括号的一样的,忽略这个操作

    (2)如果左边是左括号,右边是右括号,那么交换后([l,r-1])位置的所有前缀和全部(-2)

    (3)如果左边是右括号,右边是左括号,那么交换后([l,r-1])位置的所有前缀和全部(+2)

    判断时求出左右端点的前缀和的值和区间最小值,判断左右端点前缀和值是否相等,区间最小值是否等于左端点前缀和的值

    G

    根据二匹配对树进行黑白染色,当一个节点没有子节点是白色时染成白色,有子节点是白色时染成黑色

    对于根节点来说,如果它是白色的,那么它可以被去掉

    然后换根(dp)

    如果一个根节点是黑色的,它将要进入的节点是白色的,并且所有和它相邻的点中仅有一个白色节点,那么交换根节点和将要进入节点的颜色

    H

    线性基,经典的区间按右端点排序

    记录(id[i])表示插入到第(i)位的线性基是在哪个位置被插入的

    插入第(i)个元素时,如果线性基第(j)位已经有元素了,并且(id[j]<i),那么交换(id[j],i)(p[j],a[i]),然后继续向低位插入

    这样可以保证线性基每一位上的元素最靠后

  • 相关阅读:
    [LeetCode] 67. 二进制求和
    [LeetCode] 66. 加一
    [LeetCode] 65. 有效数字
    [LeetCode] 63. 不同路径 II
    [LeetCode] 64. 最小路径和
    [LeetCode] 61. 旋转链表
    [LeetCode] 62. 不同路径
    [LeetCode] 59. 螺旋矩阵 II
    [LeetCode] 60. 第k个排列
    [LeetCode] 58. 最后一个单词的长度
  • 原文地址:https://www.cnblogs.com/knife-rose/p/15485484.html
Copyright © 2011-2022 走看看