洛谷 P13973 [VKOSHP 2024] Nightmare Sum

news/2025/9/23 0:00:48/文章来源:https://www.cnblogs.com/Kagari22/p/19106404

先用单调栈预处理出 i 位置左右第一个小于 a[i] 的位置,然后计算出 tot 数组 (tot[i]: 所有以 a[i] 为最小值的子数组总数) 和 pos 数组去记录每个数的位置所在 (每个数互不相同)。构造离线查询,对于固定的 i,枚举所有正整数 t 使得 t * a[i] <= maxA,把这个 t 对应的阈值 T = t * a[i] - 1 上记一条查询 “询问以 a[i] 为最小值且最大值 ≤ T 的子数组个数”。queries[T] 存的就是所有需要在阈值 T 下回答的索引 i,最后按 T 倒序维护值 > T 的位置集合并回答查询,然后容斥一下 tot[i] * t 减去这些子数组最大值不是 maxA 的数量就是最后答案。

#include <bits/stdc++.h>// https://www.luogu.com.cn/problem/P13973
// from: cpp.json
#define INF 8e18
#define LD long double
#define i128 __int128_t
#define int long long
using namespace std;void solve() {int n;cin >> n;vector<int> a(n + 1);for (int i = 1; i <= n; i++) {cin >> a[i];}int maxA = *max_element(a.begin(), a.end());vector<int> L(n + 1), R(n + 1);{vector<int> stk;for (int i = 1; i <= n; i++) {while (!stk.empty() && a[stk.back()] > a[i]) {stk.pop_back();}L[i] = stk.empty() ? 0 : stk.back();stk.push_back(i);}}{vector<int> stk;for (int i = n; i >= 1; i--) {while (!stk.empty() && a[stk.back()] > a[i]) {stk.pop_back();} R[i] = stk.empty() ? n + 1 : stk.back();stk.push_back(i);}}// 所有以 a[i] 为最小值的子数组总数vector<int> tot(n + 1);for (int i = 1; i <= n; i++) {tot[i] = (i - L[i]) * (R[i] - i);}vector<int> pos(maxA + 1);for (int i = 1; i <= n; i++) {pos[a[i]] = i;}vector<vector<int>> queries(maxA);for (int i = 1; i <= n; i++) {int v = a[i];int limit = maxA / v;for (int t = 1; t <= limit; t++) {int T = t * v - 1;queries[T].push_back(i);}}set<int> st;int sum = 0;for (int T = maxA - 1; T >= 0; T--) {if (pos[T + 1] != 0) {st.insert(pos[T + 1]);}for (auto idx : queries[T]) {auto it = st.lower_bound(idx);int r = (it == st.end() ? n + 1 : *it);int l;if (it == st.begin()) {l = 0;} else {auto it2 = it;it2--;l = *it2;}int left = max(L[idx], l);int right = min(R[idx], r);if (left < idx && right > idx) {int cnt = (idx - left) * (right - idx);sum += cnt;}}}int ans = 0;for (int i = 1; i <= n; i++) {int t = maxA / a[i];ans += tot[i] * t;}ans -= sum;cout << ans << '\n';
}signed main() {ios::sync_with_stdio(false);cin.tie(nullptr);solve();return 0;
}

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

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

相关文章

单调栈01

单调栈01代码问题 困惑什么样的问题会让你想到利用栈这个数据结构? 栈(尤其是单调栈)非常适合解决 “在数组中寻找元素的特定邻居(如下一个更大 / 更小元素、第一个满足条件的元素等)” 类问题。这类问题的核心是…

网站更换关键词怎么做好快速搭建网站软件

1.当想输入一个数字再输入一个字符串要多一个nextLine(); int a scan.nextInt(); String b scan.nextLine(); 在Java编程语言中&#xff0c;使用Scanner类进行输入时&#xff0c;需要注意nextInt()和nextLine()方法的使用。nextInt()用于读取下一个整数&#xff0c;而nextLi…

发布/订阅(Publish/Subscribe)与交换机(Exchange)

本章目标理解交换机(Exchange)在RabbitMQ中的核心作用。掌握发布/订阅模式(Publish/Subscribe)的实现。学习扇形交换机(Fanout Exchange)的使用。理解绑定(Binding)的概念。实现一个日志广播系统。一、理论部分…

线性结构之链表

离散存储[链表]:定义:n个结点的离散分配彼此通过指针相连每个结点只有一个前续结点每个结点只有一个后续结点首结点没有前续结点尾结点没有后续结点专业术语:首结点:第一个有效结点,存放第一个有效数据尾结点:最…

高职教育双高建设网站佛山建设网站公司哪家好

1、基础用法就不再赘述了&#xff0c;重要的属性配置&#xff1a; Disable Catalog Update on Startup&#xff1a;禁用时在初始化Addressables的时候自动更新远程的catalog&#xff08;启用后可以通过代码 Addressables.CheckForCatalogUpdates()更新&#xff09; Use…

营销型网站软件建立网站需要多少钱就蓷y湖南岚鸿推荐

目录 一、为什么要有动态内存分配​ 二、C/C中程序内存区域划分​ 三、malloc和free​ 2.1、malloc 2.2、free​ 四、calloc和realloc​ 3.1、calloc​ 3.2、realloc​ 3.3realloc在调整内存空间的是存在两种情况&#xff1a; 3.4realloc有malloc的功能 五、常见的动…

简单的购物网站设计大型免费网页游戏排行榜

SH文件介绍 介绍SH文件示例执行SH文件具体用法 介绍 SH文件通常指的是 Shell 脚本文件&#xff0c;文件后缀名为.sh&#xff0c;其中包含一系列要由操作系统的命令解释器执行的命令。 在 Unix 和类 Unix 操作系统中&#xff0c;通常使用 Bourne Shell&#xff08;sh&#xff…

博客网站建设源码上海互联网推广找哪家

打卡记录 同积元组&#xff08;哈希表 排列组合&#xff09; 链接 思路&#xff1a;用哈希表将数组中出现的两不同数乘积依次记录&#xff0c;将出现两次以上的乘积组通过排列组合计算总情况个数。 class Solution { public:int tupleSameProduct(vector<int>& num…

分类信息网站如何优化wordpress会员通知插件

一、Array方法 方法参数返回值描述以下Api会修改原属组pushitem1, item2, ...数组新长度向数组的末尾添加一个或多个元素&#xff0c;并返回新的长度pop删除的元素删除数组的最后一个元素&#xff0c;并返回删除的元素unshiftitem1,item2, ...数组新长度向数组的开头添加一个或…

展示型网站一样做seo优化网站维护合同范本

原网址&#xff1a;http://pichcar.iteye.com/blog/676292 URL中的特殊字符 有些符号在URL中是不能直接传递的&#xff0c;如果要在URL中传递这些特殊符号&#xff0c;那么就要使用他们的编码了。编码的格式为&#xff1a;%加字符的ASCII码&#xff0c;即一个百分号%&#xff0…

网站建设和管理是教什么科目成都房地产政策

服务器数据恢复环境&#xff1a; 某单位一台DS5300存储&#xff0c;1个主机4个扩展柜&#xff0c;组建了2组RAID5&#xff08;一组27块硬盘&#xff0c;一组23块盘&#xff09;。27块盘的那组RAID5阵列存放Oracle数据库文件&#xff0c;存储系统一共分了11个卷。 服务器故障&a…

可以做手机网页的网站个人怎么进行网站建设

一、点查看自定义快捷键可以定义一些快速启动方式 然后用不习惯的快捷键也能在这里改 二、android studio 快捷键导出备份 导入方法&#xff1a; android studio &#xff0d;>file->import setting ->选择jar包即可 导出studio的设置方法&#xff1a; android …

AI 编程“效率幻觉”:为何你感觉快了,项目却慢了?

AI 编码工具普及,但为何开发者感觉很快,实际项目却变慢了?本文深入剖析 AI 编程“感知差距”背后的根源,探讨如何通过结构化输入,真正释放 AI 潜能。一、AI 编程的“速度与激情”背后 2025 年,如果你问一个开发者…

lc1033-移动石子直到连续

难度:中等(伪境)题目描述数轴上有三块石子,最左边的石子可以向右移,但不能越过最右边的石子 不能放在有石子的地方最右侧的石子同理 每次只能移动一块石子,在上面规则下不限制距离 问从初始位置到三块石子相邻,…

广东平台网站建设平台小学校园网站建设方案

我的世界换肤教程&#xff0c;本篇教程记录如何使用MCSkin 3D软件、皮肤使用、皮肤预览图制作等相关教程。感兴趣的小伙伴们可以来看看这篇我的世界皮肤教程。一.MCSkin 3D1.4软件介绍及教程&#xff1a;1. 视图-3D设置-屏蔽部位半透明显示在绘制其他部位时&#xff0c;可以用半…

苏州建站公司兴田德润简介呢wordpress 采集发布

大家根据电脑系统的位数&#xff0c;选择 32 位的 VM 配置文件或者 64 位的 VM 配置文件32 位操作系统内存不会超过 4G&#xff0c;所以没有多大空间可以调整&#xff0c;建议不用调整了64 位操作系统中 8G 内存以下的机子或是静态页面开发者是无需修改的。64 位操作系统且内存…

淄博网站制作服务网站名称是什么

人民邮电出版社图灵公司介绍&#xff08;来自http://www.turingbook.com/&#xff09; 北京图灵文化发展有限公司成立于2005年6月&#xff0c;由人民邮电出版社投资控股&#xff0c;以策划出版高质量的科技书籍为核心业务&#xff0c;主要出版领域包括计算机、电子电气、数学统…

滕州网站优化宁波创建网站

一、存储引擎概念介绍 MySQL中的数据用各种不同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎 存储引擎是MySQL将数据存储在文件系统中的存储…

手机网站加速器w7自己做网站

可以以电脑浏览器的手机模式打开&#xff0c;也可以在手机浏览器中直接打开 游戏运用了Canvas的drawImage&#xff0c;translate&#xff0c;rotate&#xff0c;save&#xff0c;restore&#xff0c;fillRect等API。 采用中介者模式&#xff0c;Game类统领全局&#xff0c;负责…

网站研发进度表下载零遁nas做网站

一、环境准备&#xff1a; 1、安装appium 2、xcode (appium 版本&#xff1a;12.1.0 xcode版本&#xff1a;12.5 可正常运行&#xff0c;ps:appium 版本&#xff1a;12.1.0 xcode版本&#xff1a;13.0 一直报奇奇怪怪的错误&#xff09; 3、依赖工具包安装 brew install…