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

CF2137F Prefix Maximum Invariance

CF2137F Prefix Maximum Invariance

题意:
给定数组a和b,要求构造一个新数组z,对于所有 \(1 \leq i\leq n\) 满足 \(max(a_1,...,a_i) = max(z_1,...,z_i)\),即前缀最大值完全相同。定义 \(f(a,b)\) 表示在满足上述条件的z中,能使 \(z_i=b_i\) 的最大数量。求 \(\sum_{l=1}^n \sum_{r=l}^n f\left( a[l..r], b[l..r] \right)\) 的结果。

对于所有子区间求和的题目,首先想到枚举左端点或右端点,但这种思路在本题行不通。于是想到对每个位置计算贡献。

对于一个位置 \(i\),假设左端点 \(l\) 已经固定的情况下,\(z_i\) 的取值有两种情况:

1、\(max[a_l,...,a_{i-1}] < a_i\),那么 \(a_i\) 一定是这个区间的新的前缀最大值,\(z_i\) 必须等于 \(a_i\)
2、\(max[a_l,...,a_{i-1}] >= a_i\),那么 \(a_i\) 不会是新的前缀最大值,\(z_i \leq max[a_l,...,a_i]\) 即可。

考虑有多少个区间 \([l,r]\) 能使 \(z_i=b_i\)。显然右端点的数量是 \(n-i+1\) 个,所以只需要考虑有多少个左端点 \(l\)

当从左到右枚举 \(i\) 时,假设对于每个 \(1 \leq j \leq i\),都维护好了数组 \(mx_j\),表示 \([j,i-1]\) 的最大值。

对于情况1,只需要找到有几个 \(mx_j\),使得 \(mx_j < a_i\)

对于情况2,只需要找到有几个 \(mx_j\),使得 \(mx_j \geq b_i\)

暴力维护 \(mx\) 和查询是 \(n^2\) 的,但是注意到 \(mx\) 具有单调性。这就意味着,每次更新 \(mx\) 时,需要修改的元素是连续的。所以可以通过单调栈来维护。

情况2的查询只需要在这个单调栈中二分即可。

Code:

#include <iostream>
#include <vector>
#include <stack>
using namespace std;using ll = long long;struct node
{int mx,l;
};void solve()
{int n;cin >> n;vector<int> a(n+10),b(n+10);for (int i = 1 ; i <= n ; i++) cin >> a[i];for (int i = 1 ; i <= n ; i++) cin >> b[i];//枚举左右端点做不了,考虑拆位算贡献ll ans = 0;vector<int> stk; //vector实现栈方便二分for (int i = 1 ; i <= n ; i++){while (!stk.empty() && a[stk.back()] < a[i]) stk.pop_back();if (a[i] == b[i]) //第1种情况{if (!stk.empty()) ans += (ll)(i-stk.back()) * (n-i+1);else ans += (ll)i * (n-i+1);}int l = -1;int r = stk.size();while (l+1 != r){int mid = (l+r) >> 1;if (a[stk[mid]] >= b[i]) l = mid;else r = mid;}if (l != -1) ans += (ll)stk[l] * (n-i+1); //第二种情况stk.push_back(i);}cout << ans << endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;cin >> T;while (T--) solve();return 0;
}
http://www.jsqmd.com/news/194437/

相关文章:

  • C++学习笔记 53 C++11 static_assert
  • 智能车竞赛参赛三年参赛日记
  • 2026必备!本科生毕业论文AI论文软件TOP10测评
  • 基于SpringBoot + Vue的通用信息发布与商品售卖平台
  • 华为OD机试双机位C卷 - 最优高铁城市修建方案 (C++ Python JAVA JS GO)
  • 泳池漆用什么材料好?实测解析水池蓝耐水性能和施工便捷性
  • 2025最新化妆品包材/护肤品包材/香水瓶/精华瓶/粉底液瓶品牌首要推荐达尔固包装 :一站式定制服务,这家包材服务商实力出众 - 全局中转站
  • Java学习笔记
  • vue 基于spring boot的景区门票预约系统停车位管理平台的设计与实现
  • 「从选择到输入」:Select 组件体验再升级
  • 边缘计算新利器:RustFS在车载/工业场景的极致优化
  • 飞搭系列 | 不止是评论,是业务的“协同上下文”
  • java协同过滤算法的外卖商城互助平台vue
  • 优化大数据领域数据血缘的存储与管理方案
  • 汉得H-AI飞码V1.2.6正式发布:编码更流畅、对话更高效、知识更精准!
  • java社区医疗服务居民健康管理系统vue 挂号 病历 住院
  • uniapp+vue小程序springboot 桥牌游戏比赛计分系统
  • 全网最全8个AI论文写作软件,研究生论文格式规范必备!
  • ssm vue企业退休人员管理系统
  • 前端开发者必学的SEO优化实战指南
  • 人工智能:迈向认知自动化时代,全球AI大模型的十大趋势、战略应对与产业机会深度解析
  • 前端GEO优化:AI时代的SEO新战场
  • uniapp+vue小程序 电子书阅读器系统的含章节3_lmi7c-vue
  • ssmvue超市进销存仓储系统 供应商 前台
  • 2026年香水瓶订制厂家top5推荐,广东广州等地优质品牌深度解析及选择指南 - 全局中转站
  • 大模型入门到精通:程序员必学技术指南,AI大模型学习路线,提升核心竞争力
  • uniapp+vuessm党建工作小秘书小程序
  • uniapp+vue小程序 二手汽车拍卖app
  • 探索Codesys中的直线插补:PLC实现直线插补的奇妙之旅
  • Simulink 永磁同步电机三电平逆变器IGBT开关管故障研究探索