题解:P13296 [GCJ 2013 #2] Erdős–Szekeres

news/2025/11/24 18:57:33/文章来源:https://www.cnblogs.com/dyc2022/p/19265360

更差的阅读体验


注意到,

  • 对于 \(j < i, A_j \ge A_i\),则有 \(X_j > X_i\)。因为如果 \(X_j < X_i, A_i \ge A_j + 1\),矛盾。
  • 对于 \(j > i, B_j \ge B_i\),则有 \(X_j > X_i\)。因为如果 \(X_j < X_i, B_i \ge B_j + 1\),矛盾。
  • \(X_i \ge \min \{X_j \space |\space A_j = A_i - 1, j < i\}\),表示 \(A_i\) 是从前面的一个 \(j\) 转移过来。
    • 由于对于 \(j_1 < j_2 < \cdots < j_k, A_{j_1} = A_{j_2} = \cdots = A_{j_k}\),有 \(X_{j_1} > X_{j_2} > \cdots > X_{j_k}\),所以记 \(lst_i\) 表示最大的 \(j\) 使 \(A_j = A_i - 1, j < i\),则 \(X_i > X_{lst_i}\)
  • \(X_i \ge \min\{X_j \space | \space B_j = B_i - 1, j>i\}\),表示 \(B_i\) 从后面的一个 \(j\) 转移过来。
    • 由于对于 \(j_1 < j_2 < \cdots < j_k, B_{j_1} = B_{j_2} = \cdots = B_{j_k}\),有 \(X_{j_1} < X_{j_2} < \cdots < X_{j_k}\),所以记 \(nxt_i\) 表示最小的 \(j\) 使 \(B_j = B_i - 1, j > i\),则 \(X_i > X_{nxt_i}\)

从上面我们可以得到足量的关于 \(X\) 的大小关系。

接下来为了找到字典序最小的排列,我们从第一个位置开始填数。假设 \(sz_i\) 表示至少有多少个数字比 \(i\) 小。则我们就看一下当前没有被选过的第 \(sz_i\) 小的数字,填进去即可。

至于怎么求 \(sz\),可以由上面的不等关系建有向边,从大的往小的连边,看一个点可以到达多少个点。

实际上实现的时候可以用把边反着连,然后用 bitset 维护有多少个点可以到达当前点。

然后这道题就做完了。复杂度 \(O(T N^2)\)

#include<bits/stdc++.h>
#define endl '\n'
#define N 2006
using namespace std;
int n,num,a[N],b[N],in[N],vis[N],fl[N],getans[N];
vector<int> G[N];
bitset<N> bt[N];
void solve(int Case)
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),G[i].clear(),in[i]=vis[i]=getans[i]=0,bt[i].reset(),bt[i].set(i);for(int i=1;i<=n;i++)scanf("%d",&b[i]);for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(a[i]>=a[j])G[j].push_back(i),in[i]++;for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(b[i]<=b[j])G[i].push_back(j),in[j]++;for(int i=1;i<=n;i++)for(int j=i-1;j;j--)if(a[j]==a[i]-1){G[j].push_back(i),in[i]++;break;}for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(b[j]==b[i]-1){G[j].push_back(i),in[i]++;break;}queue<int> q;for(int i=1;i<=n;i++)if(!in[i])q.push(i);while(q.size()){int u=q.front(); q.pop();for(int v:G[u]){bt[v]|=bt[u];if(!--in[v])q.push(v);}}printf("Case #%d: ",Case);for(int i=1;i<=n;i++){int sz=0;for(int j=1;j<=n;j++)if(bt[i][j]&&!getans[j])sz++;int j=0,cnt=0;while(cnt<sz)cnt+=!vis[++j];printf("%d%c",j," \n"[i==n]),vis[j]=getans[i]=1;}
}
main()
{int T,_=0; scanf("%lld",&T);while(T--)solve(++_); return 0;
}

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

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

相关文章

Java高效开发实战:10个让代码质量飙升的黄金法则

在Java开发的广袤领域中,写出高质量、高性能的代码是每一位开发者的不懈追求。从优化日志输出到合理运用并发处理,从优雅地处理异常到高效管理资源,每一个细节都可能成为提升代码质量的关键。接下来,让我们深入探索…

2025年11月江苏徐州隔热条工厂综合推荐指南:五大优质供应商深度解析

摘要 随着建筑节能要求的不断提高,隔热条作为节能门窗的核心部件,其市场需求在2025年11月呈现持续增长态势。本文基于行业调研数据和用户真实反馈,为您推荐五家综合实力突出的隔热条生产厂家,并提供详细的对比分析…

人工智能之数据分析 numpy:第九章 数组运算(二)

人工智能之数据分析 numpy:第九章 数组运算(二)人工智能之数据分析 numpy 第九章 数组运算(二)@目录人工智能之数据分析 numpy前言一、三角函数(Trigonometric Functions)示例:二、双曲函数(Hyperbolic Funct…

客户结算方式太多太杂?一套进销存系统帮你统一管理!

客户结算方式太多太杂?票款顺序又不固定? 做企业的人大概率都经历过两个让人头疼的问题: 第一,客户的结算方式越来越多,填错一次就要返工一次; 第二,票、款、对账顺序五花八门,系统还要求你“严格按顺序走”。…

11月24日

上午同一建模实验,数据结构课程 下午java训练

动态=静态(转化思想,类似扫描线)

动态<=>静态(转化思想,类似扫描线)逆序对2 将静态的问题变为动态的待修改的问题

RAG相关概念梳理

一、构成RAG的基本概念 Embeddings:用数学空间表达语义和文本间的关系 文本相似度: 表层:词汇重叠.深层:语义 语义相似度与距离:关注文本的深层含义与上下文,而非仅仅是词汇。 语义距离:越近,语义相似度越高;…

gtags

针对您的情况(AOSP 代码量巨大、离线环境、无 root 权限、需安装在用户目录),我强烈推荐使用 GNU GLOBAL (Gtags) 配合 Universal Ctags。 为什么选择 GNU GLOBAL (Gtags)?比 Ctags 强大:Ctags 只能跳到定义(Def…

欧姆定律是个啥?

2025/11/24常用的电学量物理量 符号 单位(简称/全称)电压 U V / 伏特电流 I A / 安培电阻 R Ω / 欧姆功率 P W / 瓦特 欧姆定律核心定律I = U / R U = I * R R = U / I电流 = 电压 / 电阻 电压 = 电流 * 电阻 电阻…

抖音投流健康领域领航者——苏州诊途赋能品牌全域增长 - langchain

在短视频营销的新时代,如何让品牌在抖音平台脱颖而出?苏州诊途健康科技有限公司,专注抖音投流领域,为您提供精准高效的流量解决方案。 公司总部位于苏州,并在杭州、重庆等核心城市设立分支机构,构建起覆盖全国的…

Windows后门排查_2025/11/24(持续更新)

Windows后门排查_2025/11/24(持续更新)Windows后门排查 dll劫持 dll劫持介绍 劫持原理: 为了性能需求,程序开发时会同时开发一些dll文件,不过并没有指明绝对路径;所以程序启动时就会寻找并加载这些dll文件,寻找…

2025年11月江苏徐州系统门窗隔热条、江苏门窗隔热条、国标隔热条、隔热条、定制隔热产品厂家综合推荐指南

摘要 随着建筑节能标准的提升和消费者对门窗性能要求的提高,系统门窗隔热条行业在2025年迎来了快速发展期。隔热条作为影响门窗隔热性能的关键部件,其质量直接关系到整个门窗系统的保温效果和使用寿命。本文基于市场…

188. 买卖股票的最佳时机 IV -- DP问题如何确定dp数组的含义以及状态转移方程?

188. 买卖股票的最佳时机 IV 如何推导状态转移方程? 当前层的每一个状态来自上一层的哪些状态? 若状态转移方程中出现复杂计算,改变dp数组的定义或增加dp数组的维度。 class Solution {public int maxProfit(int k,…

博客园真不错

BbS.23bbb1.InFo/AuSt/2025_1.tmL BbS.23bbb1.InFo/AuSt/2025_2.tmL BbS.23bbb1.InFo/AuSt/2025_3.tmL BbS.23bbb1.InFo/AuSt/2025_4.tmL BbS.23bbb1.InFo/AuSt/2025_5.tmL BbS.23bbb1.InFo/AuSt/2025_6.tmL BbS.23bbb…

程序人生必读:如何通过读书会提升工艺深度与广度

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MAF快速入门(2)Agent的花样玩法

上一篇,我们学习了如何使用MAF创建一个简单的Agent,这一篇我们学习下MAF对于单个Agent的花样玩法,这些玩法可以极大扩展我们对于Agent的适用场景。大家好,我是Edison。 上一篇,我们学习了如何使用MAF创建一个简单…

效率与安全的双引擎:聚焦合同管理中的印章文识别技术

在合同管理的数字化进程中,我们往往追逐于复杂的技术幻象,却忽略了最本质的数据价值。一枚印章,其最核心的信息并非它的轮廓与色彩,而是它所承载的文字内容。剥离防伪鉴定的复杂外衣,聚焦于将印章图像精准转化为结…

re笔记1

polar 简单re-shell 打开后查壳,用upx -d 脱壳 找到主函数(其实不是主函数,没加载完导致跳转错了) // attributes: thunk int __stdcall sub_45CC60(int a1, int a2, int a3, int a4, int a5) { return sub_4795…

海外求职必备:多语言AI简历工具如何助力求职外企和跨国公司

全球人才流动的趋势日益显著,海外求职已成为越来越多职场人实现职业突破的关键一步。然而,跨越国界寻找工作,除了应对语言障碍,更要面对不同国家和地区在简历格式、文化偏好乃至职业表达上的巨大差异。 一份未能精…

MATLAB/Simulink水箱水位控制系统实现

一、系统建模与参数设定 1.1 水箱动力学模型 质量守恒方程: \(A\frac{dh}{dt}=Q_{in}−Q_{out}\) 其中:\(A\):水箱横截面积(m) \(h\):水位高度(m) \(Q_{in}\):进水流量(m/s) \(Q_{out}\):出水流量(m/s)阀…