Luogu7912
初中同学问我咋做,所以就写了一份题解。
先摆复杂度:均摊 \(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的更多相关文章
随机推荐
- Spring随意总结
Spring框架的优点 1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑 2.可以提供众多服务,事务管理,WS等. 3.AOP的很好 ...
- vue学习 第二天 CSS基础
CSS: 层叠样式表 ( Cascading Style Sheets ) 的简称 1.css简介 1)也是一种标记语言 2)主要用来设置html页面中,标签的样式. 3)css美化了html页面, ...
- window下快速启动mysql,bat脚本
cls @echo off:设置窗口字体颜色color 0a :设置窗口标题TITLE MySQL管理程序 call :checkAdmin goto menu:菜单:menuclsecho. ech ...
- 前端下载csv文件
var str = [ 'ssssssssssssssssssssssssssssssssssssssss' ]; var uri = 'data:text/csv;charset=utf-8,%EF ...
- Excel列动态导出
列动态导出的Excel,大致整了一下,没有过多深入. 1.首先定义列样式 package a.b.common.util.excel.stream; import java.util.Objects; ...
- mysql窗口函数
使用MySQL开窗函数之前一定先确定当前数据库版本是否支持,因为只有MySQL8.0以上的版本才支持开窗函数 用navicat如何查看MySQL的版本的方法: 在出现的界面输入命令 select v ...
- wampServer本地php环境配置笔记
红色的为关键步骤,其余可以不看. 一:安装时 , 报 : 1.应用程序无法正常启动0xc0000007b 清单机确定关闭应用程序 : 2. 缺少XXX.dll文件 解决方法都是: C:\Windows ...
- ECDSA签名验证
using System; using System.IO; using System.Text; using Org.BouncyCastle.Crypto; using Org.BouncyCas ...
- error RC2104 : undefined keyword or key name: Invalid
检查.rc文件是否存在有未定义的宏常量就使用了,如果没发现就检查常量字符串表(STRINGTABLE)是否存在特殊字符,例如: " /" " 这种东西在里面,发现的话能删 ...
- docker-compose重新启动单个容器
这很简单:使用命令: docker-compose restart worker 您可以设置在杀死容器之前等待停止的时间(以秒为单位) docker-compose restart -t 30 wor ...