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

题解:qoj6537 One, Two, Three

题意:给出一个 \(1,2,3\) 构成的序列,问最多能将其划分出来多少个下标不同的 \((1,2,3)\)\((3,2,1)\),并给出构造。

做法:

\(c_x(l,r)\) 代表 \(x\)\([l,r]\) 中的出现次数,\(c_x(p)\) 表示 \(x\)\([1,p]\) 这个前缀的出现次数。

首先答案不大于 \(\min(c_1(n),c_2(n), c_3(n))\)

然后考虑,如果我现在确定有了 \(a\)\((1,2,3)\)\(b\)\((3,2,1)\),如何判定是否存在一组解。

先不考虑 \(2\) 的位置。一个显然的观察是,我一定只取最前的 \(1,3\) 和最后的 \(1,3\) 去构成。然后发现,我对于 \((1,3)\) 的对是只会有交错区间的形式而不会有嵌套的形式,证明直接分讨即可。

那么现在我们直接确定了有哪些区间,然后我们要对于每个区间去找一个 \(2\) 匹配上得到结果。既然是一个匹配的形式那么考虑 Hall 定理。容易说明,我们其实只用考虑连续有交区间是否合法即可,原因是不交的区间,我们分开他们更容易不满足 Hall 定理。

那么我们记 \(f(l,r)\) 代表区间 \([l,r]\) 中有多少个区间被 \([l,r]\) 包含,\(g(l,r)\) 代表有多少个 \((1,3)\)\(h(l,r)\) 代表有多少个 \((3,1)\)。那么会有:

\[f(l,r)\le c_2(l,r) \]

\[g(l,r) = \max(a-c_1(1, l-1)-c_3(r+1,n), 0) \]

\[h(l,r) = \max(b-c_3(1,l-1) -c_1(r+1,n), 0) \]

第一个是 Hall 定理,后两个柿子是除去不在区间中结果的。

那么把 \(f(l,r)=g(l,r)+g(l,r)\) 带入,就可以解出来 \(a,b,a+b\) 的一个限制。

\[\max(a-c_1(1,l-1)-c_3(r+1,n), 0) + \max(b-c_3(1,l-1) - c_1(r+1,n), 0)\le c_2(l, r) \]

\[a\le c_2(r)-c_2(l-1)+c_1(l-1)+c_3(n) - c_3(r) \]

\[b\le c_2(r) - c_2(l-1)+c_3(l-1)+c_1(n)-c_1(r) \]

\[a+b \le c_2(r) - c_2(l-1)+c_3(l-1)+c_1(n)-c_1(r)+c_1(l-1)+c_3(n) - c_3(r) \]

直接维护前缀的最小值计算一下就可以。

构造就直接贪心构造,每次遇到 \(1/3\) 就加入一个区间,遇到 \(2\) 就把右端点最左的区间给解决即可。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6 + 5;
int n, a[maxn], cnt[4][maxn], mx[3], A = 9e18, B = 9e18, AB = 9e18;
struct node {int l, r;friend bool operator<(node x, node y) {return x.r > y.r;}
} ;
priority_queue<node> q;
vector<int> v[4];
int id[maxn];
signed main() {cin >> n;for (int i = 1; i <= 3; i++)v[i].push_back(0);for (int i = 1; i <= n; i++) {cin >> a[i];for (int j = 0; j < 4; j++)cnt[j][i] = cnt[j][i - 1];cnt[a[i]][i]++;id[i] = cnt[a[i]][i];v[a[i]].push_back(i);}A = B = AB = min(min(cnt[1][n], cnt[2][n]), cnt[3][n]);mx[0] = mx[1] = mx[2] = 9e18;for (int i = 1; i <= n; i++) {mx[0] = min(mx[0], -cnt[2][i - 1] + cnt[1][i - 1]);mx[1] = min(mx[1], -cnt[2][i - 1] + cnt[3][i - 1]);mx[2] = min(mx[2], -cnt[2][i - 1] + cnt[1][i - 1] + cnt[3][i - 1]);A = min(A, mx[0] + cnt[2][i] - cnt[3][i] + cnt[3][n]);B = min(B, mx[1] + cnt[2][i] - cnt[1][i] + cnt[1][n]);AB = min(AB, mx[2] + cnt[2][i] - cnt[1][i] - cnt[3][i] + cnt[1][n] + cnt[3][n]);}AB = min(A + B, AB), A = min(A, AB), B = AB - A;cout << AB << endl;for (int i = 1; i <= n; i++) {if(a[i] == 1) {if(id[i] <= A)q.push(node{i, v[3][cnt[3][n] - id[i] + 1]});}else if(a[i] == 3) {if(id[i] <= B)q.push(node{i, v[1][cnt[1][n] - id[i] + 1]});}else {if(!q.empty())cout << q.top().l - 1 << " " << i - 1 << " " << q.top().r - 1 << endl,q.pop();}}return 0;
}
http://www.jsqmd.com/news/34853/

相关文章:

  • 完整教程:为你的Hugo博客站创建WordCloud标签云
  • 2025年6月GEO服务商推荐榜出炉跨平台能力成焦点
  • 2025年6月GEO服务商权威推荐榜全场景解析与选型指南
  • 家理律所联系方式: 使用指南与风险提示
  • 家理律所联系方式: 官网与微信使用指南
  • 2025年非标设备框架制造企业权威推荐榜单:设备机架钣金/自动化设备框架/铝型材设备机架源头厂家精选
  • 2025年钢板防护罩厂家权威推荐榜单:机床防护罩/盔甲防护罩/机床钢板防护罩源头厂家精选
  • 2025年深圳婚姻律所联系电话推荐:家理领衔口碑榜
  • 爱思益 联系方式: 官方号码与理性选择建议
  • 爱思益联系方式: 使用指南与风险提醒
  • 2025年上海婚姻纠纷律所联系电话推荐:精选五家口碑机构
  • 2025年北京遗产继承律师事务所联系电话推荐:老牌新锐全面覆盖
  • 2025年北京遗产继承律师事务所联系电话推荐:权威榜单与沟通技巧
  • 2025年北京遗产继承律师事务所联系电话推荐:精选五家专业机构
  • 2025年深圳沥青施工公司权威推荐榜单:沥青改色施工/路面铺设沥青施工/彩色沥青施工优质厂家精选
  • 2025年中国离婚财产律师联系电话推荐:精选推荐与使用指南
  • 2025年11月学习机品牌对比榜:销量认证与用户口碑双排名
  • 中药超细粉碎机特点,优质超细粉碎机品牌供应商/生产制造商/实力厂家推荐
  • 2025年深圳遗产继承律所联系电话推荐:权威名单与沟通技巧
  • 2025年深圳遗产继承律所联系电话推荐:五强对比与沟通技巧
  • 下载搜狗的所有细胞词库
  • 2025年上海离婚房产律师联系电话推荐:精选五强与沟通指南
  • 2025年深圳遗产继承律所联系电话推荐:精选五强与使用指南
  • 详细介绍:Microsoft.NET安装步骤详解(.NET Framework/.NET 6/7/8安装教程)​
  • 2025年比较好的半导体净化车间TOP实力厂家推荐榜
  • 2025年质量好的超临界萃取厂家最新TOP实力排行
  • 2025年热门的非标折弯机模具厂家推荐及选购指南
  • Redis实战终极指南:从客户端集成到性能优化,手把手教你避坑【第四部分】
  • 2025年热门的精密铸造厂家最新推荐权威榜
  • 2025年热门的超临界CO₂萃取热门厂家推荐榜单