首页 > 其他分享 >SOJ1972 题解

SOJ1972 题解

时间:2023-12-25 15:01:30浏览次数:30  
标签:dots le 删除 SOJ1972 非负 题解 区间

题意

设 \(S\) 为一个可重数集,满足所有元素均为非负整数。你可以对 \(S\) 进行若干次(可以为 \(0\) 次)如下操作:选择一个非负整数 \(x\) 满足 \(x\) 至少在 \(S\) 中出现了 \(2\) 次,在 \(S\) 中删除一个 \(x\),并将 \((x-1)\) 或 \((x+1)\) 插入 \(S\)。如果你选择插入 \((x-1)\),你必须保证 \((x-1)\) 非负。记 \(F(S)\) 为通过对 \(S\) 进行若干次如上操作能得到的 \(\operatorname{mex}(S)\) 的最大值。其中 \(\operatorname{mex}(S)\) 表示最小的不属于 \(S\) 的非负整数。

给定一个长度为 \(n\) 的序列 \(a_{1\dots n}\)。有 \(q\) 次询问,每次给出 \(l,r(1\le l\le r\le n)\)。对于每一个询问,你需要回答 \(F(\{a_l,a_{l+1},\dots,a_r\})\)。

\(1\le n,q\le 5\times 10^5,0\le a_i\le 10^9\)。

题解

学习了一种新方法,记之。

先转化一下,\(F(S)\) 即为求最大的 \(x\) 满足 \(S\) 中小于 \(x\) 的数的个数大于等于 \(x-1\)。

考虑区间互不包含时怎么做。将区间按左端点排序,从大到小删除所有数,动态维护每个区间内剩余数的个数。此时删除一个数后改变的区间一定连续,于是容易维护。

对于一般情况,注意到一个性质:如果区间 \([l',r']\) 被 \([l,r]\) 包含,则 \(F(\{a_{l'},\dots,a_{r'}\}) \le F(\{a_l,\dots,a_r\})\)。于是先忽略所有被包含的区间,按照上述算法执行到有区间出现答案。此时将该区间删除,同时需要加入一些新的不被包含的区间。找区间的操作可以线段树二分。

实现精细一点,复杂度 \(O(n\log n)\)。

标签:dots,le,删除,SOJ1972,非负,题解,区间
From: https://www.cnblogs.com/fish07/p/17926111.html

相关文章

  • VS2022远程调试Linux程序卡住问题解决
    问题:说明:使用vs2022第一次远程调试linux上的程序时,会出现调试器启动时卡住问题。原因就是第一次调试时,会在目标服务器下下载vsdbg工具,因为下载源在国外,所以下载特别慢,就会造成卡住的现象。解决:uname-m 查看远程调试时,用户文件夹下会多一个.vs-debugger隐藏文件夹,如果是使用......
  • 【已解决-实操篇】SaTokenException: 非Web上下文无法获取Request问题解决-实操篇
    在上一篇《【理论篇】SaTokenException:非Web上下文无法获取Request问题解决-理论篇》中,凯哥(凯哥Java)介绍了产生这个问题的源码在哪里,以及怎么解决的方案。没有给出实际操作步骤。本文,凯哥就通过threadLocal方案来解决。一、创建用于存放共享变量的对象代码如下:packagecom.kai......
  • [SDOI2010] 大陆争霸 题解
    [题目传送门](https://www.luogu.com.cn/problem/P2446)#解法由题可知,一个城市$u$保护城市$v$,所以建一条边$u\tov$表示城市$u$保护城市$v$,因为题目说保证有解,所以建的图一定是一个**有向无环图$DAG$**。再在此基础上求出最短路径。具体过程为设$dis_u$表示实际到达(攻破)$u$的最......
  • 「HCOI-R1」报名人数 题解
    博客园。我们会发现,\(2\)和\(3\)的火柴个数是一样的,\(9\)和\(0\)的火柴个数是一样的。所以只有在\(12\)到\(13\)这样是合法的,自己推一下可以知道,最多只有连续两个。而在\(l\)到\(r\)的长度大于\(9\)的时候可以直接输出\(2\)。剩下的情况直接暴力枚举即可。#......
  • CF contest 1909 Pinely Round 3 (Div. 1 + Div. 2) 题解(Vanilla的掉分赛)
    CFcontest1909PinelyRound3(Div.1+Div.2)Vanilla的掉分赛绪言PinelyRound3(Div.1+Div.2)-Codeforces\[\color{purple}\large\textbf{世界上只有一种真正的英雄主义,}\]\[\color{red}\large\textbf{就是认清了生活的真相后还依然热爱它。}\]\[\color{gray}......
  • AtCoder Beginner Contest 334题解
    ⭐AtCoderBeginnerContest334前言:比赛题目链接--按照惯例只写了主要部分的代码--特别说明:Rust有一个竞赛用的输入库,并且写ABC是可以用的,但是平时写洛谷是用不了的,所以我自己写了一个cin(),凑活能用,代码见下:读输入函数fncin()->String{letmutinput=String......
  • 【题解】洛谷P1496 火烧赤壁 (离散化)
    P1496火烧赤壁-洛谷|计算机科学教育新生态(luogu.com.cn)我们首先先看数据,n<=20000,数据不多,但是范围大(-10^9<=Ai,Bi<=10^9),这时,就可以用离散化了。但是在这里我们会遇到区间重合的问题(也可以使用区间合并),如下图本题的题意是让我们求出燃烧位置的长度之和。区间重合时只......
  • [ABC265F] Manhattan Cafe 题解
    [ABC265F]ManhattanCafe题解思路解析很有思维难度的一道题。思路是dp,\(f[i][j][k]\)表示已经计算了\(i\)维,距离点\(p\)的距离为\(j\),距离点\(q\)的距离为\(k\)时的整点\(r\)个数,由此可见我们的每一维都可以从上一维推出来,也即\(f[i][j][k]\)可以由\(f[i-1][j......
  • ABC334 全套题解
    A-ChristmasPresent简单题。voidslv(){ inta=Read<int>(),b=Read<int>(); if(a>b)Puts("Bat"); elsePuts("Glove"); return;}B-ChristmasTrees也是简单题。constexpri128INF=-1e18;i128a,m,l,r;voidslv(......
  • 题解 ABC334G【Christmas Color Grid 2】
    先求出初始时绿连通块数量。将一个绿色格子染成红色,会改变绿连通块数量,当且仅当这个绿色格子是孤点或割点。如果是孤点,会使得绿连通块数量减少一;如果是割点,会使得绿连通块数量增加它所在的点双数量减一。根据上述规则可以求出每个绿色格子染红后的绿连通块数量,求平均值即可。时......