题解:CF1548E Gregor and the Two Painters

news/2025/9/29 11:18:02/文章来源:https://www.cnblogs.com/LUlululu1616/p/19118374

很好的题!

题意:给出每行权值 \(a_i\),每列权值 \(b_j\),定义点 \((i,j)\) 权值为 \(a_i+b_j\),问权值 \(\le x\) 的点组成的连通块个数。

做法:

这个题需要用到一个数连通块的技巧,我们对于每个连通块钦定一个代表元,那么我们就只用数有多少个代表元就可以了。这个题中,我们令连通块中权值最小且尽量靠左,如果相同靠左那么就靠上,这样的点为代表元。

那么考虑一个点 \((i,j)\) 如何才能成为代表元,首先要求他肯定权值要 \(\le x\),其次我们考虑 \(la_i,ra_i\),分别代表 \(a\) 序列 \(i\) 前面第一个小于等于 \(a_i\) 的位置,\(ra_i\) 是后面第一个小于的位置,类似定义 \(lb_i,rb_i\),那么为了让 \((i,j)\) 走不到 \((la_i,j),(ra_i,j),(i,lb_j),(i,rb_j)\)。可能你会疑惑为什么只需要这四个点,手完一下发现 \(x\in[la_i+1,ra_i-1],y\in[lb_i+1,rb_i-1]\) 这样的点一定不会比 \((i,j)\) 优,而这四个点是比 \((i,j)\) 优且最容易得到的。

\((la_i,j)\) 举例,我们就得要求 \(mxla = \max\limits_{t=la_i}^ia_t+b_j>x\),否则就越过去了,同理写出来四个限制,当然对于 \(a,b\) 的两个限制完全可以合在一起,这样就只有两个限制,即假设 \(va_i = \min(\max\limits_{t=la_i}^ia_t,\max\limits_{t=i}^{ra_i}a_t)\)\(vb_j\) 类似定义,那么就要求:

\[a_i+b_j\le x,a_i+vb_j>x,va_i+b_j>x \]

\(j\) 相关的全部扔到右边去,然后就是一个二位偏序,复杂度 \(O(n\log n)\)

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 4e5 + 5, inf = 2e9;
int n, m, x, a[maxn], b[maxn], nw;
int st[maxn][21], lg[maxn];
void init(int v[], int n) {for (int i = 1; i <= n; i++)st[i][0] = v[i];for (int j = 1; (1 << j) <= n; j++)for (int i = 1; i + (1 << j) - 1 <= n; i++)st[i][j] = max(st[i][j - 1], st[i + (1 << j - 1)][j - 1]);lg[0] = -1;for (int i = 1; i <= n; i++)lg[i] = lg[i >> 1] + 1;
}
int query(int l, int r) {if(l == 0 || r == nw + 1)return inf;int k = lg[r - l + 1];return max(st[l][k], st[r - (1 << k) + 1][k]);
}
struct node {int x, y, id;friend bool operator<(node x, node y) {return (x.x != y.x ? x.x > y.x : x.id > y.id);}
} t[maxn];
int stk[maxn], l[maxn], r[maxn], top, tot;
void solve1() {top = 0;nw = n;stk[0] = 0;for (int i = 1; i <= n; i++) {while(top && a[stk[top]] > a[i])top--;l[i] = stk[top];stk[++top] = i;}top = 0;stk[0] = n + 1;for (int i = n; i >= 1; i--) {while(top && a[stk[top]] >= a[i])top--;r[i] = stk[top];stk[++top] = i;}for (int i = 1; i <= n; i++) {int val = min(query(l[i], i), query(i, r[i]));//	cout << i << " " << val << " " << r[i] << endl;t[++tot] = {val, a[i], 0};}
}
void solve2() {stk[0] = 0;nw = m;top = 0;for (int i = 1; i <= m; i++) {while(top && b[stk[top]] > b[i])top--;l[i] = stk[top];stk[++top] = i;}top = 0;stk[0] = m + 1;for (int i = m; i >= 1; i--) {while(top && b[stk[top]] >= b[i])top--;r[i] = stk[top];stk[++top] = i;}for (int i = 1; i <= m; i++) {int val = min(query(l[i], i), query(i, r[i]));//	cout << i << " " << val << " " << l[i] << " " << r[i] << " " << query(i, r[i]) << endl;t[++tot] = {x - b[i], x - val, 1};}
}
#define lowbit(x) (x & (-x))
struct Tree_array {int tr[maxn], n;void add(int x, int val) {while(x <= n)tr[x] += val, x += lowbit(x);}int query(int x) {int ans = 0;while(x > 0)ans += tr[x], x -= lowbit(x);return ans;}int queryseg(int l, int r) {return query(r) - query(l - 1);}
} tree;
int ans = 0;
void solve() {tree.n = x;sort(t + 1, t + tot + 1);for (int i = 1; i <= tot; i++) {//	cout << t[i].x << " " << t[i].y << " " << t[i].id << endl;if(t[i].id == 1)ans += tree.queryseg(t[i].y + 1, t[i].x);elsetree.add(t[i].y, 1);}
}
signed main() {cin >> n >> m >> x;for (int i = 1; i <= n; i++)cin >> a[i];for (int i = 1; i <= m; i++)cin >> b[i];init(a, n);solve1();init(b, m);solve2();solve();cout << ans << endl;return 0;
}

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

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

相关文章

Gitee DevOps:重塑中国软件开发效率的新范式

Gitee DevOps:重塑中国软件开发效率的新范式 在数字化转型浪潮席卷全球的当下,软件开发效率已成为衡量企业核心竞争力的关键指标。作为中国本土领先的一站式研发管理平台,Gitee DevOps凭借其深度本土化设计和全流程…

网站后台制作国际新闻最新消息内容

重定向理解 在Linux下&#xff0c;当打开一个文件时&#xff0c;进程会遍历文件描述符表&#xff0c;找到当前没有被使用的 最小的一个下标&#xff0c;作为新的文件描述符。 代码验证&#xff1a; ①&#xff1a;先关闭下标为0的文件&#xff0c;在打开一个文件&#xff0c;…

12306网站服务时间免费做网站软件视频

这个是我对于莫烦老师的matplotlib模块的视频做的一个笔记。1.前言Matplotlib是一个python的 2D绘图库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib&#xff0c;开发者可以仅需要几行代码&#xff0c;便可以生成绘图&#xff0c…

Gitee:中国开发者生态的崛起与数字化转型新动能

Gitee:中国开发者生态的崛起与数字化转型新动能 在全球开源生态格局中,一个来自中国的代码托管平台正展现出独特的竞争优势与发展潜力。Gitee作为本土领先的开发者协作平台,不仅解决了中国软件开发者的核心痛点,更…

C语言数组与函数实践应用项目--扫雷游戏 - 指南

C语言数组与函数实践应用项目--扫雷游戏 - 指南2025-09-29 11:12 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display:…

悟空博弈框架深度研究:从技术架构到商业应用的全景分析——声明ai研究

悟空博弈框架深度研究:从技术架构到商业应用的全景分析 一、项目背景与研究概述 悟空博弈框架是AI元人文体系中的核心组成部分,它将东方哲学智慧与现代计算技术相结合,为复杂决策场景提供了一种全新的价值博弈与共识…

自己做网站做淘宝联盟惠州网络科技有限公司

常见HTTP状态码分类&#xff1a; 1xx&#xff08;信息性状态码&#xff09;&#xff1a; 100 Continue&#xff1a;客户端可以继续发送请求的剩余部分。101 Switching Protocols&#xff1a;服务器已同意切换到另一种协议。 2xx&#xff08;成功状态码&#xff09;&#xff…

网站优化是做什么的wordpress 搜狐视频播放

Hashmap本质是数组加链表。根据key取得hash值&#xff0c;然后计算出数组下标&#xff0c;如果多个key对应到同一个下标&#xff0c;就用链表串起来&#xff0c;新插入的在前面。 ConcurrentHashMap&#xff1a;在hashMap的基础上&#xff0c;ConcurrentHashMap将数据分为多个s…

油猴脚本-自动刷新网页

// ==UserScript== // @name Userscript_reload // @namespace http://tampermonkey.net/ // @version 2025-09-29 // @description 每x分钟自动刷新当前页面,可手动暂停/继续,支持窗口拖动 // @au…

PostgreSQL数据库查询表是否被锁,以及解锁表的办法

问题现象: (1)、CDM任务执行时报错:org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.2025-09-29 10:22:19.663|INFO |cdm-job-submit-pool24|[o.a.s.c.jdbc.GenericJdbcE…

用信号量机制实现互斥,同步,前驱

实现进程互斥 1.分析并发进程的关键活动,划定临界区(如:对临界资源打印机的访问) 2.设置互斥信号量mutex,初始值为1 (mutex n.互斥) 3.进入区P(mutex)--申请资源 4.退出区V(mutex)--释放资源 注意: 对于不同的临…

详细介绍:HDFS和MapReduce——Hadoop的两大核心技

详细介绍:HDFS和MapReduce——Hadoop的两大核心技pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

同城分类网站建设怎么免费查企业电话

简述 RT-Thread的构建与配置系统由以下几个部分组成&#xff1a; KConfig&#xff1a;kernel config配置文件&#xff08;提供系统的配置裁剪功能&#xff09;SCons&#xff1a;构建工具env工具&#xff1a;主要提供构建系统所需的各种环境变量以及软件包的管理 Kconfig在R…

AxC杂题乱做

\(\operatorname{Update\;on\;2025.9.26}\) ABC422F dp题。 考虑费用提前计算,设 \(f_{i,j}\) 表示当前在点 \(i\),还需要走 \(j\) 步的最小花费。 \[f_{v,j}\gets f_{u,j+1}+j\times w_v,\exist (u,v) \]复杂度 \(O…

Apache Hive 如何在大内容中发挥能量

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

【AI 哲学思考】从大模型演进到生命隐喻:个性、极限与先天后天之问

【AI 哲学思考】从大模型演进到生命隐喻:个性、极限与先天后天之问从大模型演进到生命隐喻:个性、极限与先天后天之问当下对 AI 大模型的优化,无论是微调以适配特定场景,还是对齐人类价值观,几乎都离不开一个前提…

【AI 哲学思考】记忆的形态:从人脑到 AI 的存储之问

【AI 哲学思考】记忆的形态:从人脑到 AI 的存储之问记忆的形态:从人脑到 AI 的存储之问人脑的记忆究竟能清晰到何种程度?我们能一字不差地背诵多少内容?显然,这份 “零误差记忆容量” 必然存在一个上限 —— 就像…

广州万户网站公司wordpress英文美食主题

前言 计划是这样的&#xff1a;当有人使用你不理解的特性时&#xff0c;直接开枪打死他们。这比学习新东西要容易得多&#xff0c;不久之后&#xff0c;活下来的程序员只会用一个容易理解的、微小的 Python 0.9.6 子集来编写代码 。 Tim Peters&#xff0c;传奇的核心开发者&am…

ISP DMA TEST

定义理解 Camera ISP 场景 Camera ISP 场景下在 ISP → Memory 的数据流里:ISP 内部有 DMA 引擎(通常叫 ISP output DMA / Write DMA)。 ISP 出一帧时,数据通过 内部 DMA 硬件写入内存。 一帧传完,ISP 会产生“fr…

基于遗传优化的SVM织物瑕疵类型识别matlab仿真 - 实践

基于遗传优化的SVM织物瑕疵类型识别matlab仿真 - 实践2025-09-29 10:56 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; di…