zoukankan      html  css  js  c++  java
  • cojs 榴莲 题解报告

    首先这道题目是求第k大

    求第k大我们有逐位确定,主席树,整体二分等等方法

    首先我们考虑如何处理每个询问

    我们可以二分答案k,之后扫一遍之前的操作

    我们只需要知道有多少个权值>=k的操作经过当前点u就可以啦

    这显然是直接维护的(这里并不需要数据结构)

    之后我们考虑对询问整体二分

    那么我们需要维护数据结构来完成查询多少个权值>=k的操作经过某个点

    我们会发现两个操作对于上面这个询问的贡献是可分离的

    不妨分开来考虑,首先对于子树修改,显然我们对DFS序维护一棵线段树就可以了

    当然,我们也可以差分之后维护一个树状数组

    对于链修改,最直观的做法是树链剖分,然而树链剖分的话加上整体二分变成了O(nlog^3n),这是会T的

    但是我们可以考虑差分,我们对DFS序维护一个树状数组

    每次在u位置+1,v的位置+1

    LCA的位置-1,LCA的父亲位置-1

    这样我们查询这个点被多少条链经过等价于查询他的子树和了

    这样我们就通过整体二分+线段树+树状数组完美的解决了这道题目了

  • 相关阅读:
    常用 SQL Server 规范集锦
    让Git忽略所有obj和bin目录的同步
    Sql server 存储过程基础语法
    nginx 站点代理,负载均衡
    CentOS7.0安装Nginx-1.12.0
    CentOS7安装GNOME可视化界面和如何配置IP地址
    开发工具资料集合
    NOIP2018总结反思
    NOIP2018考试报告
    STL基础用法
  • 原文地址:https://www.cnblogs.com/joyouth/p/5460425.html
Copyright © 2011-2022 走看看