题解:AT_agc028_e [AGC028E] High Elements

news/2025/11/21 20:50:14/文章来源:https://www.cnblogs.com/LUlululu1616/p/19254452

题意:给出一个序列,要求把这个序列分成两个序列,要求这两个序列的前缀极大值的个数相同,给出字典序最小的构造。

做法:

首先肯定是逐位确定,那么假设第一个序列目前有 \(a\) 个最大值,第二个序列有 \(b\)。注意到原序列的前缀极大值分到两个序列中肯定还是前缀极大值,我们研究这个前缀极大值的一些性质。

经过一些手玩可以发现,对于这两个序列剩余的部分中,一定存在一个解满足其中一个序列中的极大值完全由原序列的极大值构成。

考虑如何证明,如果两个序列中都存在不在原序列中的极大值,那么我们令他们交换,在第一个序列中的改成在第二序列中,第二序列中的改在第一序列中,发现他们会同时被消掉,所以可以满足。

那么我们不妨假设第一个序列极大值完全由原序列组成,我们发现,如果我们确定了第二个序列中哪些数由极大值构成,那么我们就直接确定了第一个序列,同时也需要满足我下一个数要比目前第二个序列的极大值要大。

假设我剩下 \(k\) 个极大值,\(t\) 个被第二个序列用掉,第二个序列剩下包括原序列极大值的极大值个数为 \(l\),那么要求 \(a+k-t=l+b,a+k-b=t+l = 2t+(l-t)\)。考虑右侧的意义,我们令原序列中极大值权为 \(2\),剩余的为 \(1\),那么我们就等于能找到一个上升子序列的权等于 \(a+k-b\)

判定很难做,但是我们注意到我们可以无代价地将一个原序列极大值塞进第一个序列,塞完之后也可以塞剩余的 \(l-t\),所以发现我们其实只需要对于 \(l-t \bmod 2=1\)\(l-t \bmod 2=0\) 两种情况分别统计最大值即可,直接用线段树维护带权 lis 最大值即可。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2e5 + 5, inf = 2e9;
struct node {int v[2];friend node operator+(node x, node y) {return node{max(x.v[0], y.v[0]), max(x.v[1], y.v[1])};}node() {v[0] = v[1] = -inf;}node(int V0, int V1) {v[0] = V0, v[1] = V1;}
} ;
struct Segtree {node tr[maxn << 2];void pushup(int t) {tr[t] = tr[t << 1] + tr[t << 1 | 1];}void modify(int l, int r, int pos, int t, node val) {if(l == r) {tr[t] = val;return ;}int mid = l + r >> 1;if(pos <= mid)modify(l, mid, pos, t << 1, val);elsemodify(mid + 1, r, pos, t << 1 | 1, val);pushup(t);}node query(int l, int r, int x, int y, int t) {if(x > y)return node();if(x <= l && r <= y)return tr[t];int mid = l + r >> 1;if(y <= mid)return query(l, mid, x, y, t << 1);if(mid < x)return query(mid + 1, r, x, y, t << 1 | 1);return query(l, mid, x, y, t << 1) + query(mid + 1, r, x, y, t << 1 | 1);}
} tree;
node res[maxn];
int n, p[maxn], use[maxn], mx, r;
string s;
bool chk(int v, int x) {if(x < 0)return 0;node t = tree.query(1, n + 1, v + 1, n + 1, 1);
//	cout << x << " " << v << "Adsfdsaf" << " " << t.v[x % 2] << endl;return t.v[x % 2] >= x;
}
signed main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> p[i];if(p[i] > mx) {mx = p[i];use[i] = 1;r++;}}tree.modify(1, n + 1, n + 1, 1, node(0, -inf - 1));for (int i = n; i >= 1; i--) {node t = tree.query(1, n + 1, p[i] + 1, n + 1, 1);res[i].v[0] = t.v[1 ^ use[i]] + use[i] + 1,res[i].v[1] = t.v[0 ^ use[i]] + use[i] + 1;tree.modify(1, n + 1, p[i], 1, res[i]);//	cout << res[i].v[0] << " " << res[i].v[1] << endl;}int nwx = 0, nwy = 0, edx = 0, edy = 0;for (int i = 1; i <= n; i++) {r -= use[i];tree.modify(1, n + 1, p[i], 1, node());int tox = nwx + (p[i] > edx);//	cout << edx << "asdf " << nwy - tox + r << endl;if(chk(edy, tox - nwy + r) || chk(edx, nwy - tox + r)) {s += '0';nwx = tox;edx = max(edx, p[i]);}else {s += '1';nwy += (p[i] > edy);edy = max(edy, p[i]);}//	cout << nwx << " " << nwy << endl;}if(nwx != nwy)cout << -1 << endl;elsecout << s << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/972541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyppeteer: 得到当前运行中的浏览器

一,代码: import requests from requests.exceptions import HTTPError from pyppeteer.launcher import connectdef get_debugger_url():url = "http://localhost:9222/json/version"try:resp = requests…

AI救星!8个写毕业论文的实用AI工具大揭秘

2025年11月21日,作者临近毕业论文开题答辩却毫无头绪,听到同学推荐AI写论文工具后,试用了8个实用AI工具并分享经验。包括AI论文智作、QuillBot、巨鲸写作等,这些工具各有特点,如大多能30分钟生成5万字初稿,覆盖多…

数据血缘图在数据错误追溯中的应用指南

数据血缘图在数据错误追溯中的应用指南 当终端用户发现数据报告或仪表板中存在错误数据时,架构师可以利用数据血缘图进行系统化的“逆向工程”,快速定位故障的系统、转换过程和时间点。 1. 架构师追溯错误的三维定位…

Luogu P10778 BZOJ3569 DZY Loves Chinese II 题解 [ 紫 ] [ Xor Hashing ] [ 线性基 ] [ DFS 树 ]

DZY Loves Chinese II 一道喵喵哈希题。 对于连通性问题,可以考虑对原图建出 DFS 树,然后对于不同的边采取不同的处理方式。在本题中,如果需要把原图割开,那么至少需要存在一条树边,使得经过它的非树边全都被割开…

CSS基础语法 - 指南

CSS基础语法 - 指南2025-11-21 20:24 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

MineContext:我第一次感觉 AI 真正在“主动帮我管理生活”

MineContext 是一个会在后台记录与整理你日常电脑行为的开源工具。它的体验更像是一种新的信息整理方式:不需要额外输入,你的日常操作本身就是素材我现在一天基本离不开 AI 了。 不是那种“把提示词写得像炼丹”式的…

NCHU OOP-BLOG1-电梯调度-23207329-姚子康 - 翊尘

NCHU OOP-BLOG1-电梯调度程序 正文 1.前言 本次大作业分为三个阶段,每个阶段的最终Boss都是电梯调度程序及迭代,前面是几个关于类设计、正则表达式等等的小题,难度不是很大,但可以锻炼自己的类设计思维能力。 在写…

操作系统的基本概念

操作系统的基本概念1.1.1 操作系统的概念什么是操作系统?操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接…

「Temp」目录

目录吃吃吃\(\color{orange}{Eon\ 今天吃什么【脱产篇】(已完结)}\) \(\color{orange}{Eon\ 今天吃什么【大学篇】}\)Temp\(\color{magenta}{代码模板}\)Trick\(\color{magenta}{常见错误}\) \(\color{magenta}{智慧…

Linksys HTTPd缓冲区溢出远程代码执行漏洞深度解析

本文详细分析了CVE-2025-60690漏洞,该漏洞存在于Linksys E1200 v2路由器的HTTPd服务中,攻击者可通过特制HTTP请求实现远程代码执行,CVSS评分8.8分,属于高危漏洞。概述 CVE-2025-60690是一个存在于Linksys E1200 v2…

.NET+AI | MEAI | Function Calling 基础(3)

.NET+AI | MEAI | Function Calling 基础 一句话概括 Function Calling 是让大模型能够识别用户意图并返回结构化函数调用指令的能力,而不是模型主动调用函数。 为什么需要Function Calling? 大模型虽然强大,但它只能…

开发智联笔记项目时所遇问题(8)

问题:运行项目文件时报错:D:\Pycharm-workspace\pytorchdemo2\project\static>curl -o static/jsmind.js https://cdn.jsdelivr.net/npm/jsmind@0.4.6/js/jsmind.js % Total % Received % Xferd Average Spee…

高中学习机五大品牌终极横评:优缺点一览,找到最适合你的那一款!

进入高中,学习的难度、强度和节奏都发生了质的变化。面对海量的知识点、频繁的考试以及最终的升学压力,一款得力的学习机或许能成为你逆袭路上的“神助攻”。然而,市面上品牌繁多,功能各异,如何选择?今天,我们就…

NCHU-23207335-面向对象程序设计-BLOG-1

NCHU-23207335-面向对象程序设计-BLOG-1Java 实现电梯调度系统:基于单一职责原则的仿真设计 在日常场景中,电梯的高效运行依赖于合理的调度逻辑。本文将围绕一道经典的电梯调度编程题,从题目解析、类设计、核心逻辑…

开发智联笔记项目时所遇问题(4)

问题如图:从图片中的错误信息可以看出,问题出现在 index.html 第209行,错误是 TypeError: %s enable_sheets to see a function。这通常与 jsmind 的初始化或节点操作有关。 问题诊断与解决方案 1. 检查控制台完整错…

开发智联笔记项目时所遇问题(3)

问题:设置节点不自由 在脑图中显示 [object Object] 是因为节点数据结构不正确。jsMind 期望的节点数据结构与当前的数据格式不匹配。 解决方案 1. 修改创建脑图时的数据结构 在 index.html 中,修改 createMap() 函数…

20251121周五日记

20251121周五日记今日: 1.早上起床去学一新店买了几个面包去实验室,碰见亮子和飞一起分享。打两把炉石看了看何恺明新文章去吃午饭。 2.中午依旧减脂餐,吃完回实验室看看文章睡会觉。 3.下午天气很好,出去遛遛,发…

卡码网94: bellman_ford算法

卡码网94: bellman_ford算法算法思想 1.从边入手,对路径进行松弛操作 2.每次更新最短路径(松弛n-1)次 特:可有负权边,但是不能包含负权回路(可以判是否存在负权回路) https://kamacoder.com/problempage.php?…

2025广东Facebook运营公司推荐 推广、广告、获客、营销一站式解决方案

随着全球化数字贸易的深度发展,Facebook推广已成为企业拓展国际市场的核心引擎。本榜单基于技术专业性、区域服务能力、跨境营销效果三大维度,结合行业权威数据与客户反馈,全面解析2025年广东地区五大Facebook推广服…

CrewAI 上手攻略:多 Agent 自动化处理复杂任务,让 AI 像员工一样分工协作

CrewAI是一个可以专门用来编排自主 AI 智能体(Autonomous AI Agents) 的Python 框架,你可以把它理解为在代码层面组建一个“虚拟团队”,给每个 Agent 分配特定的角色、目标,让它们协同处理那些单个 LLM 搞不定的复…