zoukankan      html  css  js  c++  java
  • 国庆集训Day3笔记

    简单数据结构

    例题

    CF103D

    (ygeq sqrt m)时暴力做

    (y< sqrt m)时暴力与处理

    bzoj2054

    倒序处理,只有最后一个覆盖操作对这个位置有影响

    并查集维护每个位置的下一个未覆盖的位置

    CF480E

    倒序操作,答案显然是不降的

    枚举一个当前的答案(ans),判断每次是否可以(+1)

    (check(ans+1))的话只需要考虑新增的正方形,即有一列是确定的,维护一下每个格子最远可以向左/右多少个格子,用一个(sliding windows)和单调队列进行check即可

    ZJOI2016 旅行者

    考虑分治

    假设两个点的路径一定会经过中间的线(假设纵向切割)。枚举中间的线上的某一点并强制路径经过它,使用Dijkstra求出这个点到路径两端的的距离。两个点在同一侧的时候还需要继续分治下去。

    时间:(T(n,m)=O(n^2mlognm)+2T(n,frac{m}{2}))

    (S=nm),每次取较长的边分治是更优的,则(T(S)=O(Ssqrt S)+2T(frac{S}{2})=O(Ssqrt SlogS))

    进阶数据结构

    分治

    基础

    平面最近点对

    分治求左半边和右半边的最小距离(H),只需要考虑分界线两边距离为(H)的矩形内的点,每次check时不需要枚举很多年的点对(大致只需检查(6)个左右,考虑一个长(2H)(H)的矩阵,这里面最多放入(6)个点使得两两之间距离至少为(H)

    One Problem

    类似上一题的分治

    树分治(点分治)

    重心:所有子树的(size)(leq frac{n}{2})

    bzoj1468(solved)

    模板题

    bzoj2599(solved)

    同上,注意由于维护的是最小值无法通过容斥求得

    One Problem

    cdq分治(按时间分治)

    时间在前的操作才会对时间在后面的操作产生影响

    三维偏序

    (z)为时间维度,按照(z)排序。分治后只需考虑左半边对右半边的贡献,直接树状数组

    (T(n)=2T(frac{n}{2})+O(nlogn))(O(nlog^2n))

    bzoj2683

    对时间维度建立分治结构,只考虑前面的加对后面的询问的影响,接下来同上

    bzoj2716

    (ans=|x_i-x_j|+|y_i-y_j|)
    暴力拆绝对值,跑四遍cdq

    假设(x_i>x_j,y_i>y_j),则(ans=(x_i+y_i)-(x_j+y_j)),每次询问(max(x_j+y_j))即可

    整体二分

    POJ2104(q<=2*10^5)

    模板题,略

    LOJ2169

    同上

    线段树分治

    bzoj4025(solved)

    在插入边的同时判断是否为二分图:带权并查集,维护每个点到它所在的子树的根的距离,在同一棵树加边时判断是否会形成奇环

    对于每一条边的存在时间([L,R]),把它放到线段树上拆成log段,按照遍历线段树的方式进行修改,在所有的叶子节点处处理询问。这样的话需要维护一个支持回退的并查集,如果路径压缩的话时间复杂度会退化成(O(n)),故只能按秩合并。总时间复杂度(O(nlog^2n))

    例题

    HNOI2016 网络

    重链剖分:往上跳的轻边条数是(O(logn))条(记(u)的重儿子为(v),则(siz_u>2siz_v),故跳轻边时子树大小至少除以2)

    维护删除:维护两个堆(P,Q),其中(P)处理插入,(Q)处理删除,每次询问时找到(P.top())(Q.top()),相同则同时弹出(使用线段树分治可以避免使用堆,但是时间复杂度均为(O(nlog^3n))

    二分(mid),检查所有(geq mid)的路径的交是否包括(u),单个询问会有3个(log)的时间(线段树分治+二分+倍增LCA)

    整体二分:插入删除路径使用树上差分,强制在线的话可以转化成单点修改,区间(子树)查询,BIT维护。分治时将插入删除分至两边:

    直接二分:询问是否有(geq mid)且不经过(u)的路径。线段树([l,r])维护(forall win[l,r])路径的交

    ARC093F

    假设(1)在第1位,记(G_i=[p_{2^{k-1}+1},p_{2^k}]),则(min(G_i) otin A)

    容斥,枚举(Sin[n]),有(forall iin S,min(G_i)in A)

    (f[i][S]):在(a_m...a_i)中,(S)(G)的最小值在其中的方案数

  • 相关阅读:
    System.IO.StreamWriter
    C# XML
    C# 泛型
    ACM将一个十进制的数转换为一个十六进制的数输出
    ACM打扫花园问题
    ACM用N个正方体来建造金字塔问可以建造多少层
    输入一串数字找出其中缺少的最小的两个数
    高效算法——B 抄书 copying books,uva714
    暴力求解——POJ 3134Power Calculus
    暴力求解——打表,暴力
  • 原文地址:https://www.cnblogs.com/encodetalker/p/11620699.html
Copyright © 2011-2022 走看看