当前位置: 首页 > news >正文

括号序列构造字典序最小化问题

匹配

题目描述
一个长度为 \(2n\) 的序列 \(a\),其中 \(1\dots n\) 中所有数都恰好出现两次。
相同数字填相同括号,使其变成合法字符串,同时要字符串字典
序最小。
数据范围
\(1 ≤ n ≤ 10^6\)

分析

我们括号匹配的经典做法就是把左括号看作 \(+1\),右括号看作 \(-1\),那么任意一个位置上的前缀和必须 \(\geq0\),且最后一个位置的前缀和必须为 \(0\)

这个可以引申出来一个定理:

对于第 \(i\) 个左括号一定满足其位置 \(pos\leq 2i-1\)

显然的,因为如果不满足就说明前面的右括号多了,也就是上一个前缀和出现了负数。

那么我们就转化为了处理左括号与这个的偏序关系,又因为字典序天然的贪心,所以说我们从前往后枚举能不能填左括号,如果能填就尽量填。

那怎么判断呢?我们只需要判断这个位置能不能找到偏序关系即可,而且与它数字相同的那一组也要满足。

这个思路很巧妙,位置用 set 维护就行了。

代码

时间复杂度 \(\mathcal{O}(n\log n)\)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <set>
#define int long long
#define N 1000006
using namespace std;
int p[N << 1],n,ans[N << 1],nxt[N],pre[N];
set<int> st;
signed main(){cin >> n;for (int i = 1;i <= 2 * n;i ++) scanf("%lld",&p[i]);if (n & 1) return puts(":("),0;for (int i = 1;i <= 2 * n;i ++)if (!pre[p[i]]) pre[p[i]] = i;else nxt[p[i]] = i;for (int i = 1;i <= n;i ++) st.insert(2 * i - 1);for (int i = 1;i <= 2 * n;i ++)if (i == pre[p[i]]) {auto t1 = st.lower_bound(pre[p[i]]),t2 = st.lower_bound(nxt[p[i]]);if (t1 != st.end() && t2 == t1) t2 = st.upper_bound(*t1);if (t2 != st.end()) st.erase(t1),st.erase(t2);else ans[i] = ans[nxt[p[i]]] = 1; }if (st.size()) return puts(":("),0;for (int i = 1;i <= 2 * n;i ++) putchar(ans[i] ? ')' : '(');return 0;
}
http://www.hskmm.com/?act=detail&tid=27812

相关文章:

  • C++ 性能优化:用 CRTP 搭建零开销编译期多态
  • Python 中包(Package)和模块(Module)的区别
  • Elasticsearch Enterprise 9.1.5 (macOS, Linux, Windows) - 分布式搜索和分析引擎
  • GIMP 3.0.6 发布 - 免费开源图像编辑器
  • Elasticsearch Enterprise 8.19.5 (macOS, Linux, Windows) - 分布式搜索和分析引擎
  • 2025 年国内丝杆升降机厂家最新推荐排行榜:滚珠 / 螺旋 / 蜗轮 / 同步 / 电动类型品牌核心优势深度解析
  • Linux设置分辨率(临时)
  • CAD 多个dwg文件合成一张图(无需插件)
  • 鸿蒙应用开发从入门到实战(十八):组件编程思想之代码复用
  • Gerkin+Pytest(python)建立自动化(BDD)
  • git克隆代码保留提交记录,从源仓库迁移到新仓库地址
  • ArcGIS 10.8 永久免费版安装包下载及安装教程!
  • OpenAI 发布 gpt-realtime-mini,成本降低 70%;Deepgram 发布转录和轮次检测融合 api丨日报
  • 2025年搜索式BI深度研究报告:核心功能、应用场景与产品选型
  • 2025 年光伏螺旋地桩厂家推荐:天津宏图新能源发展有限公司专业解决方案与设备优势
  • Ai元人文:部署模式构想——公共服务与用户消费
  • 基于Java+Springboot+Vue开发的旅游景区管理系统源码+运行步骤
  • MySQL从入门到熟练查询
  • 云之家提单反馈
  • Atcoder Beginner Contest 422
  • centos安装libgdiplus-6.1
  • RapidJSON 自定义内存分配器详解与实战 - 详解
  • 2025 最新推荐!云南旅游旅行社口碑排行榜,权威榜单助选靠谱服务商
  • 代码生成模型自我调试技术解析
  • 每日一题 ##1两数之和
  • python-Zipfile模块-常用代码
  • Elasticsearch 备份:方案篇
  • 307、出塞
  • 2025 年刑事辩护律师/看守所会见律师/取保候审律师推荐:徐义明律师的实务经验与南京华商律所服务体系解析
  • 详细介绍:C#的MVVM架构中的几种数据绑定方式