P2900 [USACO08MAR] Land Acquisition G

news/2024/10/9 8:27:48

题目

image

思路

我们按照土地的长为第一关键字,土地的宽为第二关键字,从大到小排序,对于将被大矩形完全包含的小矩形删去,因其不影响结果,这样就得到了长严格下降,宽严格上升的序列。

从左往右考虑合并,假如将 \(l\)\(r\) 段合并,那么长取矩形 \(l\) 的长 \(w_l\),宽取矩形 \(r\) 的宽 \(h_r\)

可以写出转移方程 \(f_i = \min\limits_{j = 0}^{i - 1}\{f_j + h_i \cdot w_j\}\),然后就是转化为 \(y = kx + b\) 的形式,放入李超线段树随便搞就过了。

代码

#include <bits/stdc++.h>#define int long longusing namespace std;
using PII = pair<int, int>;const int N = 1000010;int n, cnt;
PII p[N], a[N];struct func {int k, b = 1e18;
};struct node {func id;
} tr[N << 2];int gety(func id, int x) {return id.k * x + id.b;
}bool compare(func f1, func f2, int x) {int y1 = gety(f1, x);int y2 = gety(f2, x);return y1 < y2;
}void modify(int u, int l, int r, int pl, int pr, func s) {int mid = l + r >> 1;if (l > r) return;if (pl <= l && r <= pr) {if (tr[u].id.b == 1e18) {tr[u].id = s;return;}if (compare(s, tr[u].id, mid)) swap(tr[u].id, s);if (compare(s, tr[u].id, l)) modify(u << 1, l, mid, pl, pr, s);if (compare(s, tr[u].id, r)) modify(u << 1 | 1, mid + 1, r, pl, pr, s);return;}if (pl <= mid) modify(u << 1, l, mid, pl, pr, s);if (pr > mid) modify(u << 1 | 1, mid + 1, r, pl, pr, s);
}int query(int u, int l, int r, int x) {int mid = l + r >> 1;int ans = gety(tr[u].id, x);if (l == r) return ans;if (x <= mid) return min(ans, query(u << 1, l, mid, x));else return min(ans, query(u << 1 | 1, mid + 1, r, x));
}int f[N];signed main() {ios::sync_with_stdio(false);cin.tie(nullptr);cin >> n;for (int i = 1; i <= n; i++) cin >> p[i].first >> p[i].second;sort(p + 1, p + n + 1, greater<PII>());for (int i = 1; i <= n; i++) {a[++cnt] = p[i];int j = i;while (j <= n && p[j].first <= p[i].first && p[j].second <= p[i].second) j++;i = j - 1;}n = cnt;for (int i = 1; i <= n; i++) p[i] = a[i];for (int i = 1; i <= n; i++) {modify(1, 1, N - 10, 1, N - 10, {p[i].first, f[i - 1]});f[i] = query(1, 1, N - 10, p[i].second);}cout << f[n] << '\n';return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

最简最速!C++版OpenCV安装配置教程Win/Mac!!!

Clion+OpenCV(C++版)开发环境配置教程Win/Mac平时在学习和比赛的时候都是使用的Python版本的OpenCV,最近遇到了一个项目使用的上位机性能有限于是决定视觉方面使用C++的OpenCV来节约上位机资源提高运行的速度,在查阅了网上的各种资料后发现这些资料参差不齐有些博客的方法绕来…

不可不知的WPF画笔(Brush)

在WPF中,屏幕上的所有内容,都是通过画笔(Brush)画上去的。如按钮的背景色,边框,文本框的前景和形状填充。借助画笔,可以绘制页面上的所有UI对象。不同画笔具有不同类型的输出( 如:某些画笔使用纯色绘制区域,其他画笔使用渐变、图案、图像或绘图)。在WPF中,屏幕上的…

缓存介绍

从业务层面上的堆数据库下性能瓶颈的解决方案: 分库分表、读写分离 程序员修神之路--略懂数据库集群读写分离而已缓存 缓存 (Cache):本质是数据交换的一段缓冲区,也可以称为一种存储数据的组件,主要用于减小数据交换双方速度不匹配的问题。 缓存在计算机世界里是一个常见并…

开源的工作流系统突出优点总结

随时欢迎大家一起了解开源的工作流系统的突出优势和特点。当前,想要实现高效率的办公,可以一起来了解低代码技术平台、开源的工作流系统的相关特点和功能优势。作为较受职场喜爱的平台产品,低代码技术平台拥有可视化才做界面、灵活、好维护操作等多个优势特点,在推动企业流…

2024年最新版Typora免费使用教程心得

在数字化时代,写作已成为我们日常沟通、知识分享的重要手段。然而,繁琐的排版格式常常让人望而却步。幸运的是,Markdown编辑器以其简洁的语法和高效的排版功能,为我们带来了福音。Typora是一款功能强大的文本编辑器,它采用所见即所得的编辑方式,能够让用户快速地编辑各种…

P10786 [NOI2024] 百万富翁

讲解 P10786 [NOI2024] 百万富翁。先爆搜出 t>=9 的部分分,然后考虑使用动态规划算法进行常数优化跑出答案。思路: 先考虑 Sub1 的部分分,暴力算法:暴力询问所有 \(i<j\) 的数对 \((i,j)\)。 则一个 \(i\) 为最大值当且仅当 \((i,j)\) 的返回值都是 \(i\) 且在 \(i\)…

基于PSO粒子群算法的三角形采集堆轨道优化matlab仿真

1.程序功能描述 假设一个收集轨道,上面有5个采集堆,这5个采集堆分别被看作一个4*20的矩阵(下面只有4*10),每个模块(比如:A31和A32的元素含量不同),为了达到采集物品数量和元素含量的要求(比如:需采集5吨和某元素单位质量在65与62之间),求出在每个4*20的矩阵…

用我十多年的“奇葩”经验,给在“挂吊瓶”的博客园几点建议

初识博客园 我是08年开始接触开发的,一开始涉及的就是.net和java,记得那会好像是jar6来着,net嘛还是2.0 那时候包括现在,找资料很多时候会找到博客园来 一开始我以为博客园是很多博主成立的一个联盟,就是各自弄一个博客系统,然后公用一个域名 为啥会这么想呢? 因为我看高…