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

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

更差的阅读体验


注意到,

  • 对于 \(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://icebutterfly214.com/news/63329/

相关文章:

  • 动态=静态(转化思想,类似扫描线)
  • 抖音投流健康领域领航者——苏州诊途赋能品牌全域增长 - langchain
  • MATLAB/Simulink水箱水位控制系统实现
  • 视觉外观缺陷检测系统公司推荐及行业应用解析
  • Minimind-一个开源LLM项目的代码分析2:模型训练
  • 2025医疗器械第三方测试机构推荐:靠谱选择 + 核心资质全解析!
  • 推歌/个人歌单 - Gon
  • 2025年11月暗黑游戏推荐:权威榜单与选择指南
  • 【C++】完美转发(转载)
  • 深入解析:大数据:python药材数据可视化分析系统 中药数据分析 医药数据分析 Django框架 Echarts可视化 requests爬虫 ✅
  • 哪个医疗器械第三方公司好?资质齐全口碑佳医疗器械公司推荐!
  • 租房管理系统软件哪个好用?租房管理系统软件排名TO5排行榜
  • 使用 keepalived 实现 tendis 高可用
  • BT-1001:全能粉体特性测试标杆,连续两届斩获 “国产好仪器” 殊荣
  • 2025 年 11 月门窗厂家权威推荐榜:窗纱一体/断桥铝/内开内倒/外平开/外开下悬,匠心工艺与高密封性设计精选
  • 2025 年 11 月气体检测仪厂家实力推荐榜:臭氧/甲醛/氢气/VOC/氮氧化物/二氧化硫/硫化氢检测仪及氧气分析仪专业品牌精选
  • 构建高可用、高性能系统的关键技术方案总结
  • 哪家做医疗器械检测比较好?信誉好的医疗器械检测公司推荐!
  • 2025年11月北京陪诊公司推荐榜单及选择指南
  • 2025年优质的锌铝镁电缆桥架厂家最新排行榜
  • mysql命令
  • 2025年桥梁用橡胶支座订制厂家权威推荐榜单:橡胶桥梁支座/公路橡胶支座/高速橡胶支座源头厂家精选
  • 2025 年 11 月码垛机厂家权威推荐榜:龙门/立柱/全自动/机器人码垛设备,高效智能与稳定耐用工业之选
  • ddddocr: 得到滑块的目标位置
  • 2025年昆明不听话学校管理权威推荐:昆明不听话孩子学校优化/昆明不听话少年学校/昆明小孩不听话学校机构精选
  • 2025年11月氢气检测仪厂家权威推荐榜单:防爆型/便携式/高精度氢气检测仪,专业安全检测设备供应商精选指南
  • 供应链质量协同新玩法:让供应商和你“零距离”协作
  • 写给0-1岁的初创公司合伙人(129):副业营销(Side-Project Marketing)——做工具引流,而不是投广告
  • 2025年南京留学机构排名前十名:南京留学,英国留学,香港留学,新加坡留学,澳洲留学,美国留学
  • 2025年广州留学机构排名前十名:广州留学,英国留学,香港留学,新加坡留学,澳洲留学,美国留学