首页 > 其他分享 >QOJ964. Excluded Min 题解

QOJ964. Excluded Min 题解

时间:2025-01-06 22:12:06浏览次数:6  
标签:le Min 题解 询问 operatorname Excluded 区间 考虑 mex

QOJ 原题链接

简要题意

设 \(S\) 为一个可重非负整数集合,假设 \(x\) 为 \(S\) 中的一个出现次数 \(\ge 2\) 的元素,你可以将 \(x\) 改成 \(x + 1\) 或 \(x - 1\)。定义 \(f(S)\) 表示对 \(S\) 进行上述操作任意次所能达到的最大 \(\operatorname{mex}\)。

给定一个长度为 \(n\) 的序列 \(a\),有 \(q\) 次询问,每次询问给定 \(l, r\),请你求出 \(f(\{a_l, a_{l + 1}, \ldots, a_r\})\)。

观察到 \(\operatorname{ans} = \max\{i \mid \sum\limits_{j = l}^r [a_j \le i] > i\}\),考虑维护这个值。

将询问离线下来再从大往小枚举 \(\operatorname{mex}\),每个询问都维护 \(b_j = \sum\limits_{i = l_j}^{r_j} [a_i \le \operatorname{mex}] - \operatorname{mex}\),当 \(b_i > 0\) 时,将 \(ans_i\) 更新。考虑 \(\operatorname{mex}\) 减少 \(1\) 时的变化,将所有包含 \(a_i = \operatorname{mex}\) 的位置 \(i\) 的询问 \(j\) 的 \(b_j\) 减少 \(1\),接着全局加上 \(1\)。

于是就是一个矩形加、查最大值的问题,可以使用 KD-Tree 做到 \(O(n \sqrt{n})\)。

由于矩形问题并不好做,考虑转成序列问题,但是问题在于每次修改的询问是零散的。

考虑解决修改区间不连续的问题,出现这个问题的原因是可能存在两个区间 \(i, j\) 满足 \(l_j \le l_i \le r_i \le r_j\)。如果不存在这样的 \((i, j)\),那么修改的区间是连续的。

一个显然的性质是无论 \(\operatorname{mex}\) 是多少,都一定满足 \(b_i \le b_j\)。 即 \(i\) 一定在 \(j\) 之后被更新。所以我们先不考虑 \(i\),在 \(j\) 找到答案之后再放入 \(i\),那么询问序列无论何时都是有序的,并且也不会影响答案的正确性。

那么现在问题就是:

  • 放入 \(i\) 后怎么求 \(i\) 现在的 \(b_i\)。显然是可以使用树状数组维护的。
  • 如何找到这样一个 \(i\)。考虑将询问按 \(r\) 从小到大排序,\(r\) 相同时按 \(l\) 从大到小排序。称一个区间如果不被任何答案未知的区间包含,那么这个区间为好区间。那么存在这样一个性质:对于好区间 \(i\),设上一个好区间为 \(j\),那么 \(i\) 包含 \((j + 1) \sim (i - 1)\) 中的所有区间。所以可以使用线段树求出 \(i\)。

总时间复杂度 \(O(n \log n)\),可以通过。

标签:le,Min,题解,询问,operatorname,Excluded,区间,考虑,mex
From: https://www.cnblogs.com/CTHOOH/p/18544855

相关文章

  • [POJ3237] 树的维护 题解
    一眼树链剖分或\(LCT\),由于在学后者所以就写了。取反操作相当于把\(min,max\)取反后交换,所以要维护\(min,max,val\)。时间复杂度\(O(m\logn)\)。#include<bits/stdc++.h>#definefa(x)lct[x].fa#definefl(x)lct[x].fl#definemx(x)lct[x].mx#definemn(x)lct[x]......
  • 复旦大学2024--2025学年第一学期(24级)高等代数I期末考试第七大题解答
    七、(10分) 设$V$是数域$\mathbb{K}$上的$n$维线性空间,$\varphi,\psi$是$V$上的幂等线性变换, 满足$\varphi\psi=\psi$且$\mathrm{Ker}\varphi$是$\psi$-不变子空间.证明:(1)$\mathrm{r}(\psi)\leq\mathrm{r}(\varphi)$;(2)若$\mathrm{r}(\psi)=\mathrm{......
  • 复旦大学2024--2025学年第一学期(24级)高等代数I期末考试第八大题解答
    八、(10分) 设$A,B$为$n$阶实矩阵,满足$A^2+B^2=AB$且$AB-BA$为非异阵, 求证:$n$是3的倍数且$|BA-AB|>0$.证明 设$\omega=-\dfrac{1}{2}+\dfrac{\sqrt{3}}{2}\mathrm{i}$,则$\omega^2=\overline{\omega}=-\dfrac{1}{2}-\dfrac{\sqrt{3}}{2}\mathrm{i}$,于......
  • Docker多阶段构建详解及问题解决
    在Docker的构建过程中,多阶段构建是一种非常强大的功能,它允许我们在一个Dockerfile中使用多个阶段来构建镜像,从而大大优化最终镜像的大小和构建过程。本文将详细介绍Docker多阶段构建的基本用法,并针对在使用该功能时可能遇到的问题提供解决方案。Docker多阶段构建基础多阶......
  • 题解:CF2057D Gifts Order
    传送门Statement单点修改,全局查询所有\([l,r]\)中区间极差减去区间长度的最大值,多组数据。Solution首先,如果区间的最大/最小值出现在区间中间,区间长度的改变并不会对其造成影响,反之,当最大值出现在区间左右端点时,区间长度改变可能会产生影响。在保证区间最大/最小值存在......
  • 题解:CF2057B Gorilla and the Exam
    传送门Statement给定数组\(a\),定义每次操作为选择区间\([l,r]\),记\(x=\min_{l\leqi\leqr}{a_i}\),删除区间内所有\(a_i=x\),给你\(k\)次修改的机会,每次修改某一个位置的数,问最少需要几次操作使得原数组全为\(0\)。Solution最初不做任何修改的操作次数定为原数组中......
  • 202409 青少年软件编程等级考试Python三级真题 建议答题时长:60min(含答案及分析)
    原连接:竞赛考级题库--202409青少年软件编程等级考试Python三级真题-Python1.编程题鸡兔同笼小明在解决经典的“鸡兔同笼”问题时,使用“穷举法”编写了以下代码。请将代码中红色①②③④处补充完整:tou=int(input("请输入笼中鸡与兔脑袋的总数: "))jiao=int(input......
  • Linux服务器无Root权限安装Cuda方法及问题解决
    CUDA简介什么是CUDA?CUDA(ComputeUnifiedDeviceArchitecture)是由NVIDIA提供的一种并行计算平台和编程模型,用于加速计算密集型任务。CUDA允许开发者使用GPU的计算能力,通过并行处理来快速执行复杂的计算任务。CUDA包括以下主要组成部分:CUDAToolkit:为开发人员提供工......
  • [python3]Excel解析库-calamine,10倍openpyxl性能
    `calamine`是一个用于读取多种电子表格格式(如Excel、LibreOfficeCalc等)的Python库。它支持`.xls`,`.xlsx`,`.ods`和`.csv`文件格式,提供了简单易用的API来加载和处理电子表格数据。`calamine`的一大特点是它的轻量级和高效性,特别适合需要快速解析电子表格而不依......
  • 题解:UVA10482 The Candyman Can
    UVA10482TheCandymanCan思路记总重量为\(sum\)。因为\(n\le32\)所以可以暴力。使用动态规划,\(dp_{i,j}\)代表第\(1\)组重量为\(i\),第\(2\)组重量为\(j\)(则第\(3\)组重量为\(sum-i-j\))是否可以达到。最后再暴力枚举取所有\(\max(i,j,sum-i-j)-\min(i,j,sum-......