LG P5244 [USACO19FEB] Mowing Mischief P
\(\text{Code}\)
#include <bits/stdc++.h>
#define IN inline
#define eb emplace_back
using namespace std;
template<typename Tp>
IN void read(Tp &x) {
x = 0; char ch = getchar(); int f = 0;
for(; !isdigit(ch); f |= (ch == '-'), ch = getchar());
for(; isdigit(ch); x = (x<<3)+(x<<1)+(ch^48), ch = getchar());
if (f) x = ~x + 1;
}
typedef long long LL;
const int N = 2e5 + 5, M = 1e6 + 5;
const LL INF = 1e18;
struct point{int x, y;}a[N];
int lis[N], n, m;
LL f[N], g[N];
vector<int> G[N];
IN LL calc(int x1, int y1, int x0, int y0){return (LL)(x1 - x0) * (y1 - y0);}
struct SegmentTree {
#define ls (p << 1)
#define rs (ls | 1)
vector<int> Q[N << 2];
void build(int p, int l, int r) {
Q[p].clear(); if (l == r) return;
int mid = l + r >> 1; build(ls, l, mid), build(rs, mid + 1, r);
}
void insert(int p, int l, int r, int x, int y, int z) {
if (x > r || y < l) return;
if (x <= l && r <= y) return Q[p].eb(z), void();
int mid = l + r >> 1;
insert(ls, l, mid, x, y, z), insert(rs, mid + 1, r, x, y, z);
}
void solve(int p, int l, int r, int L, int R, int cur) {
if (r < l || R < L) return;
int mid = l + r >> 1, bst = 0;
for(int i = L; i <= R; i++) {
LL s = f[G[cur - 1][i]] + calc(a[Q[p][mid]].x, a[Q[p][mid]].y, a[G[cur - 1][i]].x, a[G[cur - 1][i]].y);
if (g[Q[p][mid]] > s) g[Q[p][mid]] = s, bst = i;
}
solve(p, l, mid - 1, bst, R, cur), solve(p, mid + 1, r, L, bst, cur);
}
void dfs(int p, int l, int r, int cur) {
for(auto v : Q[p]) g[v] = INF;
solve(p, 0, Q[p].size() - 1, l, r, cur);
for(auto v : Q[p]) f[v] = min(f[v], g[v]);
if (l == r) return; int mid = l + r >> 1;
dfs(ls, l, mid, cur), dfs(rs, mid + 1, r, cur);
}
}T;
struct BIT {
int c[M];
IN int lowbit(int x){return x & -x;}
IN void add(int x, int v){for(; x <= m; x += lowbit(x)) c[x] = max(c[x], v);}
IN int query(int x){int s = 0; for(; x; x -= lowbit(x)) s = max(c[x], s); return s;}
}bit;
IN void solve() {
for(int i = 1; i <= n; i++) lis[i] = bit.query(a[i].y) + 1, bit.add(a[i].y, lis[i]);
for(int i = 0; i <= n; i++) G[lis[i]].eb(i);
for(int i = 1; i <= n; i++) sort(G[i].begin(), G[i].end(), [](int x, int y){return a[x].x < a[y].x;});
for(int i = 1; i <= n; i++) f[i] = INF;
for(int i = 1; i <= n && G[i].size(); i++) {
T.build(1, 0, G[i - 1].size() - 1);
int p = 0, q = 0;
for(auto j : G[i]) {
while (p < G[i - 1].size() && a[G[i - 1][p]].x <= a[j].x) ++p;
while (q < G[i - 1].size() && a[G[i - 1][q]].y > a[j].y) ++q;
T.insert(1, 0, G[i - 1].size() - 1, q, p - 1, j);
}
T.dfs(1, 0, G[i - 1].size() - 1, i);
}
}
int main() {
freopen("mowing.in", "r", stdin);
freopen("mowing.out", "w", stdout);
read(n), read(m);
for(int i = 1; i <= n; i++) read(a[i].x), read(a[i].y);
sort(a + 1, a + n + 1, [](point a, point b){return a.x < b.x;});
solve();
int mx = 0;
for(int i = 1; i <= n; i++) mx = max(mx, lis[i]);
LL ans = INF;
for(int i = 1; i <= n; i++) if (lis[i] == mx) ans = min(ans, f[i] + calc(m, m, a[i].x, a[i].y));
printf("%lld\n", ans);
}
LG P5244 [USACO19FEB] Mowing Mischief P的更多相关文章
- [USACO19FEB]Mowing Mischief
题目大意: 给定平面上的一些点,求这些点的一个\(LIS\),并且还需要满足下列式子最小: \[ \sum_{i=1}^{n-1}(a[i+1].x-a[i].x)*(a[i+1].y-a[i].y) ...
- Linux下安装性能测试负载机LG
系统:CentOS release 6.6 (Final) x86_64 安装包: 1.LRLG_00031.iso [Load Generator Standalone (Linux 64-bit ...
- bootstrap 之 xs,sm,md,lg && 主要颜色
mobile – xs ( <768px ) tablet – sm ( 768~991px ) desktop – md ( 992~1170px ) large desktop – lg ( ...
- boostrap中lg,md,sm,xs
boostrap中lg,md,sm,xs分别表示多少px? .col-xs- 超小屏幕 手机 (<768px).col-sm- 小屏幕 平板 (≥768px).col-md- 中等屏幕 桌面显示 ...
- LG 2.2.1 P350安卓系统刷机,问题总结,希望对需要的朋友有助
手机误删软件导致短信,键盘等无声音提醒 我的手机前几天被我误删了一个软件,导致电话接不了,别人打电话的时候,老提示我在通话中,但是我可以在通话中看到对方的打电话记录.短信,键盘,USB连接,等等都没有 ...
- 美版nexus 5 LG D820才支持CDMA,国际版LG D821不支持
我们都知道nexus 5其实是有两个不同的版本的,分别是LG D820和LG D821,它们在几乎所有的配置和外观上都没有任何的区别,主要区别在通讯模块上,一个支持GSM/CDMA/WCDMA/LTE ...
- git lg 使用 转
命令: git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yello ...
- git lg 配置
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d ...
- 国行 lg g3 D858 刷 lg g3 D858hk 教程(备忘)
纯手打,转载请注明出处~ 刷机有风险,出现问题概不负责! 本着自娱自乐的宗旨 ,分享一下,出了问题不负责! 准备的材料: 1,手机一枚(废话)国行lg g3 d858 2,root 工具 用来root ...
- LG Optimus L90 [D415] T-Mobile 刷机
1 先使用[ROOT大师]ROOT手机. 2 执行以下ADB命令. adb shell su //备份 dd /by-name/laf of=/sdcard/laf.img. //清除 dd /by- ...
随机推荐
- Vue3“直接”修改props
父组件 import { reactive } from 'vue'; //对话框数据 const show = reactive({ isshow: false, }); //打开对话框 const ...
- day 19 分组查询 & having和where区别
day19 分组查询group by having用法 用于分组关键字(group by)后面 用于对分组之后的结果集进行筛选 having关键字后面可以使用聚合函数 having和where的区别 ...
- 【离线数仓CDH版本】即席查询工具(Presto、Druid、Kylin)、CDH数仓、Impala查询
1.即席查询 一.Presto 大数据量.秒级.多数据源的查询引擎[支持各种数据源work的内存级查询] 由coordinator和多个work构成,work对应不同数据源Catalog 特点:基于内 ...
- 李宏毅机器学习笔记:从0到写AI
part1.基本介绍 1.机器学习的三个任务 一般情况下,我们在机器学习中有三个基本任务,分别是Regression Classification和Structured Regression是计算数值 ...
- [seaborn] seaborn学习笔记12-绘图实例(4) Drawing example(4)
文章目录 12 绘图实例(4) Drawing example(4) 1. Scatterplot with varying point sizes and hues(relplot) 2. Scat ...
- yolov8-tensorrt加速
仓库(已更新源码): https://github.com/FeiYull/tensorrt-alpha 仓库简介:基于CUDA+TensorRT实现深度学习加速,支持前处理.后处理.推理在GPU上运 ...
- vulnhub靶场之FUNBOX: UNDER CONSTRUCTION!
准备: 攻击机:虚拟机kali.本机win10. 靶机:Funbox: Under Construction!,下载地址:https://download.vulnhub.com/funbox/Fun ...
- 终端安装python3使用如下指令
''' brew install python3 ''' 会报错,报错如下:Cannot install in Homebrew on ARM processor in Intel default p ...
- 本地文件上传 Gitee 和 GitHub
新建仓库 上 GitHub 或者是 gitee 创建仓库 在所在的文件夹打开终端 在本地项目文件夹打开终端, 或者 cd 到本地项目文件夹 配置提交项目的用户名和提交项目的邮箱 git config ...
- Three.js 进阶之旅:新春特典-Rabbit craft go 🐇
声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 摘要 兔年到了,祝大家身体健,康万事顺利.本文内容作为兔年新春纪念页面,将使用 ...