首页 > 其他分享 >高维问题

高维问题

时间:2025-01-09 15:49:10浏览次数:1  
标签:le 线段 分治 问题 维护 例题 我们 高维

参考了 dead_X 老师了的课件。

Part 1.扫描线

扫描线的核心思路就是将一个序列维转换为一个时间维,然后枚举这个时间维从而达到降维的效果。

而剩余的维度我们就可以使用其他的数据结构来维护。

但是使用扫描线有一个严苛的要求:原问题中的询问和时间不相关。

例题1:P10814 【模板】离线二维数点

我们可以把 \(a_i\) 看成一个点 \((i,a_i)\)。

那么我们现在的问题就转化为:在右上角为 \((r,x)\),左下角为 \((l,0)\) 的矩阵中有多少个点。

此时我们可以将这个问题转化为在右上角为 \((r,x)\),左下角为 \((0,0)\) 的矩阵中点的个数减去在右上角为 \((l-1,x)\),左下角为 \((0,0)\) 的矩阵中的点的个数。

那么我们在本题当中可以将坐标作为时间维,然后用树状数组来维护目前 \(\le x\) 的数的个数。

例题2: P8421 [THUPC2022 决赛] rsraogps

和上一题类似的,我们以 \(r\) 为时间轴,然后记 \(s_i\) \(i = L,R \le r\) 的区间 \([L,R]\) 的答案之和。那么问题就变成了怎么维护 \(s_i\)。

我们考虑 \(A_i,B_i,C_i\) 的变化:

  • \(A_i\) 的二进制中 \(1\) 会变成 \(0\)。

  • \(B_i\) 的二进制中 \(0\) 会变成 \(1\)。

  • \(C_i\) 的因数会逐渐减小。

然而我们发现这种减小最多只会改变 \(O(\log n)\) 次,那么我们就可以暴力维护这三个值了。

Part 2.CDQ分治

我们可以利用分治剪掉一维!

我们可以先处理左边和右边的贡献,然后再考虑左右两边之间的贡献即可。

具体的先处理所有 \(l \le i,j \le mid\) 的点对然后在考虑 \(mid + 1 \le i,j \le r\) 的点对数量,最后再考虑 \(1 \le i \le mid\) 且 \(mid + 1 \le j \le r\) 的点对数量即可。

例题1: P9068 [Ynoi Easy Round 2022] 超人机械 TEST_95

对于每一个值 \(i\) 我们可以维护 \(x_i\) 表示第一次出现的位置和 \(y_i\) 表示最后一次出现的位置。

那么我们现在要求的就是 \(\sum_{i,j} [x_i < y_j][i > j]\)。

然而我们发现一次修改操作最多只会修改 \(2\) 个 \(x_i\) 和 \(2\) 个 \(y_i\)。那么我们只需要单点修改就行了。


你以为这就结束了吗?

不,CDQ 分治还可以将带修改的问题转化为静态问题。

对于这种东西我们可以把所有的操作离线下来,然后在时间为上进行 CDQ 分治。

而这里我们会有贡献的点对就是一个修改和一个查询的答案。

例题2: P4690 [Ynoi2016] 镜子里的昆虫

维护每个位置左侧第一个同色点的位置,记 \(pre_{i}\)。此时区间数颜色就被转化为了一个经典的二维数点问题。

可以证明 \(pre\) 只会变化 \(O(n + m)\) 次,即单次操作只会导致 \(O(1)\) 个 \(pre\) 值变化。那么我们可以用 CDQ 分治来解决动态的单点加矩形求和问题。

然后 \(pre\) 直接用 ODT 来维护就可以了。

Part 3:线段树分治

考虑如何动态维护一个图,并且查询他是否为一个二分图。

考虑用线段树维护时间轴,把边挂在线段树对应的节点上。然后遍历线段树,然后线段树上的节点维护在图上相对应的节点的可撤销并查集。进去该节点时加入边对并查集的影响,出去时撤销即可。

此时时间复杂度为 \(O(n \log^2 n)\)。

例题1:Painting Edges

看到这种题考虑线段树分治。

对于每一个颜色 \(k\) 我们都开一个可撤销并查集,然是我们发现将判断和区间操作放在一起比较难做,于是考虑把判断和区间操作分开进行。

区间操作其实就是,对于一条边的两次染色 \(x,y\),染色区间为 \([x+1,y−1]\),颜色有两种可能:

  • 染上去了,颜色是 \(x\) 染色时的颜色。

  • 没染上去,颜色是上一次染色的颜色。

那么判断变成单点问题了,分治的时候直接判断即可。

标签:le,线段,分治,问题,维护,例题,我们,高维
From: https://www.cnblogs.com/Carousel/p/18662246

相关文章

  • SpringCloud 解决 Docker 镜像 虚拟机网卡导致的IP 不准确的问题
    SpringCloud应用可能会使用InetAddress.getLocalHost().getHostAddress()或类似方法来获取当前机器的IP地址。但在Docker容器环境中,这种方法可能会返回容器内部的IP地址,而不是宿主机的IP地址。分布式应用部署到服务上,由于服务器可能存在多张网卡,造成IP地址不准。出......
  • Timer too close 问题
    在Klipper中,**timertooclose**错误是一个较为常见的问题,通常与时间管理或调度相关。Klipper使用高精度定时器来控制打印机的动作,而这个错误表示系统中的某些定时器事件过于接近,超出了Klipper的处理能力。官方地址:https://klipper.discourse.group/t/timer-too-close/663......
  • 解决 IntelliJ IDEA 快捷键冲突问题
    解决IntelliJIDEA快捷键冲突问题在使用IntelliJIDEA进行开发时,快捷键是提高效率的重要工具。然而,某些外部软件(如GeForceExperience、网易云音乐等)可能会占用IDEA的快捷键,导致快捷键冲突。本文将总结如何解决快捷键冲突问题,并介绍一些实用的工具和方法。1.常见快捷键......
  • SpringBoot大事务问题的常用优化方案
    From: https://www.jb51.net/program/320280l7c.htm大事务是指运行时间比较长,操作的数据比较多的事务123,大事务的产生原因包括操作的数据比较多、大量的锁竞争、事务中有其他非数据库的耗时操作等,本文给大家总结了SpringBoot大事务问题的常用优化方案,需要的朋友可以参考下......
  • 智能负载如何解决常见问题?
    调节功率可调的电阻通常涉及使用一种称为电位器(potentiometer)的设备。电位器是一种有三个引出端的电阻器,其中两个固定端和一个滑动端。通过改变滑动端的位置,可以改变从固定端到滑动端的电阻值,从而改变电路中的电流和电压。以下是调节功率可调电阻的基本步骤:确定电位器的规格:在选......
  • 分布式锁Redisson详解,Redisson如何解决不可重入,不可重试,超时释放,主从一致问题的分析解
    目录1.Redisson解决不可重入锁导致的死锁问题 2.不可重试问题Pub/Sub的优势锁释放的发布逻辑3.超时释放的问题1.锁的超时释放机制背景2.源码分析2.1锁的获取2.2看门狗机制2.3看门狗续期实现2.4手动设置锁的过期时间总结 4.主从一致性 问题背景......
  • v-show控制el-table-colunm不生效,用v-if 标题栏样式走样,乱序问题
    问题描述需求:表格checkbox的这一列需要做显示隐藏控制,满足条件的才能显示这一列。问题:在使用el-table的时候,遇到对el-table-column显示与隐藏的控制时,使用v-show不生效,使用v-if样式不对。用v-if标题栏样式走样,乱序原因分析:v-show起作用的本质是display:none,而因为td的displa......
  • SQL进阶实战技巧:即时订单比例问题
    目录0需求描述1数据准备2问题分析3小结往期精彩0需求描述订单配送中,如果期望配送日期和下单日期相同,称为即时订单,如果期望配送日期和下单日期不同,称为计划订单。请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单的比例,保留两位......
  • MySQL表锁定问题详解:原因、检测与解决方案
    个人名片......
  • 企业级应用升级需要注意哪些问题和细节
    企业级应用升级是一个复杂且关键的过程,涉及多个方面的问题和细节。以下是一些需要注意的关键点:一、升级前的准备明确升级目标:在升级之前,企业应明确升级的目标,例如提高系统性能、增加新功能、修复安全漏洞等。制定详细的升级计划,包括评估现有软件的情况、分析业务需求、确定......