初中同学问我咋做,所以就写了一份题解。


先摆复杂度:均摊 \(O(n)\)。

考虑,如果我们每次操作的复杂度都与输出量同阶,而输出量总量 \(O(n)\),则复杂度得到均摊。

于是我们现在要设计一个算法,满足每步复杂度与输出量同阶。

考虑暴力维护当前的每个颜色段开头元素,以及在当前总序列中每个元素的前驱、后继。

这个通过一个链表即可实现。

容易分析出每步复杂度与输出量同阶。

于是本题解完。

以下是参考代码(常数很大,已经过卡常):

import io
import os
import sys
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
a=[]
b=0
def readInt():
global input
global a
global b
if len(a)<=b:
a=list(map(int,input().split()));b=0
ans=a[b];b+=1
return ans
n=readInt();S=[];now=[];nxt=[];pre=[];done=[]
for i in range(n):
S.append(readInt());now.append(i);nxt.append(i+1);pre.append(i-1);done.append(False)
def Merge():
global S
global now
global done
x=[]
m=len(now)
for i in range(m):
if not done[now[i]] and (not len(x) or S[x[-1]] != S[now[i]]):
x.append(now[i])
now=x
def Pop():
global S
global now
global nxt
global pre
global done
m=len(now)
if m:
for i in range(m-1):
sys.stdout.write(str(now[i]+1)+' ')
sys.stdout.write(str(now[-1]+1)+'\n')
x=[]
for i in range(m):
p=now[i]
done[p]=True
if pre[p] != -1:
nxt[pre[p]]=nxt[p]
if nxt[p] != n:
pre[nxt[p]]=pre[p]
if S[nxt[p]] == S[p] and (not len(x) or S[x[-1]] != S[now[i]]):
x.append(nxt[p])
now=x
Merge()
while len(now):
Pop()

Luogu7912的更多相关文章

随机推荐

  1. Gitlab CICD

    简介 最近公司要求要通过Gitlab CICD做一个项目的自动打包,我之前也没接触过,所以只能现学现卖.不过说实话,让我这个连大学英语四级都没过的人看Gitlab官网的纯英文教程,我真的是脑阔昏,于是 ...

  2. 性能测试工具locust压测介绍

    官方文档:https://docs.locust.io/en/stable/index.html 1.初识locust Locust 完全基本 Python 编程语言,采用python 编写压测脚本, ...

  3. JavaSE——复杂对象数组练习

    定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同. 学生的属性:学号,姓名,年龄. 要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断. 要求2 ...

  4. Unity一键制作预制体Prefab一键修改Prefab属性

    1.适用于制作多个预制体(一个模型文件下面几百个子物体,都需要制作成预制体,这一个一个拖不是要炸裂) 模型资源如下图 2.模型先放到Resources文件夹下面方便读取,制作完预制体可以给他拖到其他文 ...

  5. pandas-数据结构转换-纵转横

    如下代码,亲测有效,后面会附上入口以及出口数据结构截图 def test_func(file_path): """ 把pandas数据结构-dataframe,横向的索引 ...

  6. PYTHON中的CONCURRENT.FUTURES模块

    一 : 概述 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor: 进程池,提供异 ...

  7. Docker私服(Registry)

    Docker Registry安装 #拉取镜像 docker pull registry #创建文件夹 mkdir -p /var/my_registry #启动容器 docker run -d -- ...

  8. ENGG1310 Electricity and electronics P1.1 microelectronics & optoelectronics

    课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self use, not included any assignments or exams 听说这节课内容 ...

  9. aqueduct “Uncaught error Bad state: No element" 或者 "NoSuchMethodError: The getter 'location' was called on null.”

    可以先将Pub\Cache目录下的内容清空(移除aqueduct命令),随后重新运行命令生成 pub global activate aqueduct  设置环境变量 创建用户变量 PUB_HOSTE ...

  10. Spring 常见注解及其作用

    1.@ConfigurationProperties    可以非常方便的把资源文件中的内容绑定到对象上       绑定单一属性值,绑定整个对象属性   2.@Value("${app.n ...