zoukankan      html  css  js  c++  java
  • 数据结构记录

    分块:

    prob1:长度为n的数列,n次操作,单点插入,单点/区间查询(假设需要维护的信息可以O(1)维护)

    sulution:分块,sqrt(n)次操作后重构,重构O(n),总复杂度O(nlogn)

    other_solu:用splay维护即可,O(nlogn),常数大,复杂度允许的话写上面那个

    prob2:长度为n的数列,n次操作,每次操作是(l, r, c),询问区间中等于c的有多少个,并将区间都改为c

    solution:分块,每块维护一个有序数组和覆盖的lazy标记即可,查询时当前块有标记则O(1)得到答案,否则O(logn)得到,总复杂度是O(n*sqrt(n)*logn)

    实际上我们只维护每个块是否是同一个数字,是则O(1)回答,否则暴力查询。若块大小为k,则修改为O(k + n / k),查询为O(n)

    但实际上一次操作最多使两个块,由同一个数字的状态变为非同一个数字的状态,所以修改的均摊复杂度是O(n / k)的

    k取根号,总复杂度O(n^1.5)

    prob3:长度为n的数列,n次询问,问区间众数

    solu1(离线):莫队+set,O(n*sqrt(n)*logn)

    solu2(在线):参见clj论文(区间众数解题报告)第一种做法,复杂度同上

    solu3(在线):clj论文的无修改优化做法,O(n^1.5)

    solu4(离线):莫队有个O(n^1.5)的做法,额外维护当前区间出现次数为i的数字有多少个即可,这做法有空间优势,O(n)的空间

    能够维护众数出现次数,但无法维护众数是哪个数

    prob4:带修改区间众数

    solution(在线):参见clj论文,O(n^(5/3))

    prob5:查询区间出现正偶数次/正奇数次的数字个数

    solu:相当于count在模2意义下的众数

  • 相关阅读:
    编程题目: PAT 1012. 数字分类 (20)
    编程题目: PAT 1011. A+B和C (15)
    Poj3683(2-set
    LightOJ 1427(AC自动机
    UVA 11990(BIT套treap
    网络流汇总....
    10月——备战区域赛
    去掉ubuntu的文件管理器中“位置”栏里的无用标签
    Poj 2104(主席树入门
    Poj 1568(极大极小搜索
  • 原文地址:https://www.cnblogs.com/ytytzzz/p/10975543.html
Copyright © 2011-2022 走看看