洛谷 P5066 [Ynoi2014] 人人本着正义之名

Problem

对一个01序列进行以下\(m\)个操作:

  1. 区间覆盖为0
  2. 区间覆盖为1
  3. 将区间\([l,r-1]\)中的数\(a_i\)同时变为\(a_i\)与\(a_{i+1}\)按位或的值
  4. 将区间\([l+1,r]\)中的数\(a_i\)同时变为\(a_i\)与\(a_{i-1}\)按位或的值
  5. 将区间\([l,r-1]\)中的数\(a_i\)同时变为\(a_i\)与\(a_{i+1}\)按位与的值
  6. 将区间\([l+1,r]\)中的数\(a_i\)同时变为\(a_i\)与\(a_{i-1}\)按位与的值
  7. 查询区间和

强制在线。

\(1\le n,m\le 3\times10^6,0\le a_i\le1\).

Solution

刚开始思考的时候,看到数据范围中有着随机生成这个部分分,想到了珂朵莉树(毕竟背景是珂朵莉嘛~)。

但是貌似珂朵莉无法对操作\(3,4,5,6\)进行很好的维护。

又注意到这个序列只有01,这里可是一个突破口!

我们手玩一下样例中的01001

首先分段:

\[[0][1][00][1]
\]

操作\(3\):

\[[11][0][11]
\]

可以发现,所有的0段的最右边的0都变成了1,也就是所有的1段的长度向左扩展了1位(如果它的左边还有的话)。

操作\(4,5,6\)也类似,每次一种段只会有边界上的改变。

这个貌似就很好维护了。

但是我们都知道,珂朵莉维护的是一段值相同的区间,却不一定随时都是极长的。

即,我们需要让一个0段的左右保证是1段(或者没有)。

我们手写一个平衡树(而不用set)来维护这些子段。因为左/右端点移动量显然是可以叠加的,可以在平衡树上打标记维护。

但是有两个问题:如何保证每个子段都是极长的?如何保证没有空的子段?

如果子段不是极长的,那么就会有相邻的同值子段,其中一个移动边界时会占领另一个,但是显然不需要移动。对于这个问题比较简单,只要在区间赋值的时候多向两遍拓展即可。其他的操作都是不会造成这种非极长子段的。

当我们在移动边界的时候,会出现一个子段的长度已经变成了0的情况,会导致总段数剧增,无法保证时间复杂度。

在平衡树上再维护两个值:子树中最短的0/1段长度即可。

发现有长度为0的段时直接暴力删除。

平衡树的一个节点维护了:左端点,右端点,子段的值,子树和,子树中0段的数量,子树中1段的数量,子树内最短的0段,子树内最短的1段,lazy标记。

然后这道题就结束了。

Code

按照传统(?),只给部分代码供参考。有问题也可以私信(如果我还没AFO的话)

剪切板

Other

唉,2021年了,这道题需要一点卡常了……

原本\(Ynoi\)是很友好的,但是有些人用错误的时间复杂度乱搞过去了,所以只能加强加强再加强,导致正解想要过去也比较困难了……

\(\textbf{2021-03-31 08:00:25 thus,AC.}\)

附上debug日志。祝您早日AC。

洛谷 P5066 [Ynoi2014] 人人本着正义之名的更多相关文章

  1. C++ 洛谷 2014 选课 from_树形DP

    洛谷 2014 选课 没学树形DP的,看一下. 首先要学会多叉树转二叉树. 树有很多种,二叉树是一种人人喜欢的数据结构,简单而且规则.但一般来说,树形动规的题目很少出现二叉树,因此将多叉树转成二叉树就 ...

  2. 「树形DP」洛谷P2607 [ZJOI2008]骑士

    P2607 [ZJOI2008]骑士 题面: 题目描述 Z 国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的 ...

  3. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  4. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  5. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  6. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  7. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  8. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  9. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  10. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

随机推荐

  1. 深入理解Base64编码原理

    前言 上篇文章有涉及到Base64编码的内容,今天我们再来详细了解一下Base64的编码原理以及应用场景. 通过这篇文章你能够学习到: 什么是Base64,为什么需要Base64? Base64的编码 ...

  2. breach1靶机渗透学习

    靶机下载 https://www.vulnhub.com/ 找Breach-1.0,不过这个是老靶机了,可以看网上其他博客附带有靶机下载的网盘链接,靶机官网访问很慢而且网站好像出问题了排版很乱,不打也 ...

  3. 从上下文切换谈thread_local工作原理

    从上下文切换谈thread_local工作原理 thread_local是什么 熟悉多线程编程的小伙伴一定对thread_local不陌生,thread_local 是 C++11 引入的一种存储类说 ...

  4. 使用ssh连接virtual Box里的虚拟机

    使用ssh连接virtual Box里的虚拟机 需求:virtual Box提供的文件拖放功能在从虚拟机拖向主机时,会出现一些卡顿,因此考虑使用ssh代替其文件传输功能. 高级 -> 端口转发 ...

  5. 深入理解 Java AQS 原理与 ReentrantLock 实现

    目录 一.AQS 简介 二.AQS 核心设计 2.1 核心组成部分 2.2 AQS 的工作原理 2.3 AQS 的关键方法 三.ReentrantLock 与 AQS 的关系 3.1 Reentran ...

  6. .NET原生操作向量数据库实战系列(一):.向量数据库的应用以及与AI结合的畅想

    在当今数据驱动的时代,向量数据库(Vector Database)作为一种新兴的数据库技术,正逐渐成为软件开发领域的重要组成部分.特别是在 .NET 生态系统中,向量数据库的应用为开发者提供了构建智能 ...

  7. 网络编程-关闭连接(1)-C/C++相关系统调用

    背景 在linux网络编程中,经常需要编写关闭socket的代码,比如心跳检测失败需要关闭重连:网络报异常需要关闭重连.但究竟关闭操作做了什么,却不太清楚.目前项目使用Netty框架来实现的网络编程, ...

  8. leetcode每日一题:使字符串平衡的最小交换次数

    引言 ​ 今天开始,打算做一个新的系列:leetcode每日一题的题解.预期每天用90分钟的时间,去写一篇当天的每日一题的题解,这个目标跟早起结合在一起,才有足够的时间完成.其实早在前几年,就开始断断 ...

  9. Win10微软拼音输入法设置-注册表

    修改候选项窗口 HKEY_CURRENT_USER\Software\Microsoft\InputMethod\CandidateWindow\CHS\1 EnableFixedCandidateC ...

  10. 无需WebView,Vue也能开发跨平台桌面应用

    前言 一直以来,使用Vue开发桌面应用大部分都是使用基于webview的方案,如electron,tauri等.不依赖webview的,移动端倒有不少,如Weex,NativeScript等,桌面端寥 ...