首页 > 其他分享 >O(nlogn)复杂度三维偏序

O(nlogn)复杂度三维偏序

时间:2023-11-06 22:01:54浏览次数:28  
标签:偏序 frac 复杂度 三维 贡献 二维 nlogn

给定三个长为 \(n\) 的序列 \(a, b, c\),求有多少个二元组 \((i, j)\) 满足 \(a_i < a_j, b_i < b_j, c_i < c_j\)。

\(n \leq 10^6\)。

考虑对 \((a, b), (a, c), (b, c)\) 分别做一次二维偏序,设它们的偏序数之和为 \(S\)。

  • 当 \((i, j)\) 形成三维偏序的时候,\((i, j)\) 在三次二维偏序里面都被统计了,对 \(S\) 的贡献是 \(3\)。

  • 当 \((i, j)\) 只形成二维偏序时,\((i, j)\) 在三次二维偏序里面仅统计一次,对 \(S\) 的贡献为 \(1\)。

  • 当 \((i, j)\) 形成一维偏序或者不形成偏序,那么对 \(S\) 的贡献为 \(0\)。

设形成 \(x\) 维偏序的 \((i, j)\) 集合为 \(A_x\),那么 \(|A_3 \cup A_2| = \frac{n \times (n - 1)}{2}\)。对于 \(|A_3 \cup A_2|\) 里面的数对全部扣掉 \(1\) 的贡献,那么 \(S \gets S - \frac{n \times (n - 1)}{2}\),\(A_2\) 中数对对 \(S\) 的贡献为 \(0\),\(A_3\) 中数对对 \(S\) 的贡献为\(2\)。最后答案就是 \(\frac{S}{2}\)。

时间复杂度 \(O(n \log n)\)。

标签:偏序,frac,复杂度,三维,贡献,二维,nlogn
From: https://www.cnblogs.com/zzxLLL/p/17813859.html

相关文章

  • cf797eE. Array Queries(暴力+复杂度分析)
    cf797e还是暴力,将不同的询问根据k分开,然后bfs,建出一棵树,然后dfs。时间复杂度:O(能过)稍微口胡分析一下大概是\(min(1,q[1])*n/1+min(2.q[2])*n/2+min(3,q[3])*n/3+.....\)qi表示第k=i的询问个数因为每一种k它最多将所有的a分成k类,如果全部满了,就是n,那么显然是尽量分配给前面......
  • 数据结构与算法(LeetCode)第一节:认识复杂度,对数器,二分法与异或运算
    一、认识复杂度1.评估算法优劣的核心指标:时间复杂度:当完成了表达式的建立,只要把最高阶项留下即可。低阶项都去掉,高阶项的系数也去掉,记为O(去掉系数的高阶项);​ 时间复杂度是衡量算法流程的复杂度的一种指标,该指标只与数据量有关,与过程之外的优化无关常见的时间复杂度(从好到坏)O......
  • 时间复杂度O(40n*n)的C++算法:修改图中的边权
    1.12.1.题目给你一个n个节点的无向带权连通图,节点编号为0到n-1,再给你一个整数数组edges,其中edges[i]=[ai,bi,wi]表示节点ai和bi之间有一条边权为wi的边。部分边的边权为-1(wi=-1),其他边的边权都为正数(wi>0)。你需要将所有边权为-1的边都修改为范......
  • 算法之空间复杂度以及评判算法的标准(Java)
    一:概述//例如:给出一些整数n:31254972,其中//有两个整数是重复的,要找出这两个重复地整数。//对于这个简单的需求,可以使用很多的思路类解决,其中最朴素的就是//双重循环//遍历整个数列,每遍历一个新的整数就开始回顾//之前遍历过的所有整数。//即第1步:遍历整数3,前面没有......
  • 基于dfn序的O(nlogn)-O(1) lca
    \(dfn\)序的长度是欧拉序的一半,常数较小,并且代码便于理解背诵。让欧拉序求lca成为时代的眼泪。代码部分实现思路来自cqbz_dongjie点击查看代码autominlca=[&](intx,inty){return(dfn[x]<dfn[y])?x:y;};intt=std::__lg(n)+1;std::vector<std::vect......
  • CDQ分治和三维偏序
    专题:CDQ分治本页面将完整介绍CDQ分治。简介CDQ分治是一种思想而不是具体的算法,与动态规划类似。目前这个思想的拓展十分广泛,依原理与写法的不同,大致分为三类:解决和点对有关的问题。1D动态规划的优化与转移。通过CDQ分治,将一些动态问题转化为静态问题。CDQ分治的......
  • 经典复杂度
    整除分块套整除分块也就是求:\[O\left(\sum_{i=1}^{\sqrtn}\sqrt{\frac{n}{i}}\right)\]设\(f(n)=\sum\limits_{i=1}^{n}\dfrac{1}{\sqrt{i}}\),那么原式就是\(O(\sqrtn\timesf(\sqrtn))\),因此我们只需要求\(f(n)\)即可。把\(f(n)\)从求和式改写为积分式,也就是:\[f(n)......
  • 渐进时间复杂度
         ......
  • 聊聊前端算法复杂度
    算法复杂度前端开发一般:重时间轻空间什么是复杂度程序执行时需要的计算量和内存空间(和代码简洁度无关)复杂度是数量级,不是具体的数字一般针对一个具体的算法,而非一个完整的系统时间复杂度程序执行时需要的计算量(cpu)O(1)一次就够"可数的",和输入量无关,无论输入量......
  • 子树合并背包类型的 dp 的复杂度证明
    首先,我们发现,转移一颗子树的背包,实际上就是把该子树的根节点的所有儿子的子树背包合并,再与根节点合并。具体的,合并两颗子树的转移方程式如下:\[f(u,i)=\max\limits_{j+k=i}\{f(v_1,j)+f(v_2,k)\}\]于是有如下伪代码:dfs(u): su=1 f(u,1)=w[u] for(vinu) sv=siz......