\(\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的更多相关文章

  1. [USACO19FEB]Mowing Mischief

    题目大意: 给定平面上的一些点,求这些点的一个\(LIS\),并且还需要满足下列式子最小: \[ \sum_{i=1}^{n-1}(a[i+1].x-a[i].x)*(a[i+1].y-a[i].y) ...

  2. Linux下安装性能测试负载机LG

    系统:CentOS release 6.6 (Final)  x86_64 安装包: 1.LRLG_00031.iso [Load Generator Standalone (Linux 64-bit ...

  3. bootstrap 之 xs,sm,md,lg && 主要颜色

    mobile – xs ( <768px ) tablet – sm ( 768~991px ) desktop – md ( 992~1170px ) large desktop – lg ( ...

  4. boostrap中lg,md,sm,xs

    boostrap中lg,md,sm,xs分别表示多少px? .col-xs- 超小屏幕 手机 (<768px).col-sm- 小屏幕 平板 (≥768px).col-md- 中等屏幕 桌面显示 ...

  5. LG 2.2.1 P350安卓系统刷机,问题总结,希望对需要的朋友有助

    手机误删软件导致短信,键盘等无声音提醒 我的手机前几天被我误删了一个软件,导致电话接不了,别人打电话的时候,老提示我在通话中,但是我可以在通话中看到对方的打电话记录.短信,键盘,USB连接,等等都没有 ...

  6. 美版nexus 5 LG D820才支持CDMA,国际版LG D821不支持

    我们都知道nexus 5其实是有两个不同的版本的,分别是LG D820和LG D821,它们在几乎所有的配置和外观上都没有任何的区别,主要区别在通讯模块上,一个支持GSM/CDMA/WCDMA/LTE ...

  7. git lg 使用 转

    命令: git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yello ...

  8. git lg 配置

    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d ...

  9. 国行 lg g3 D858 刷 lg g3 D858hk 教程(备忘)

    纯手打,转载请注明出处~ 刷机有风险,出现问题概不负责! 本着自娱自乐的宗旨 ,分享一下,出了问题不负责! 准备的材料: 1,手机一枚(废话)国行lg g3 d858 2,root 工具 用来root ...

  10. LG Optimus L90 [D415] T-Mobile 刷机

    1 先使用[ROOT大师]ROOT手机. 2 执行以下ADB命令. adb shell su //备份 dd /by-name/laf of=/sdcard/laf.img. //清除 dd /by- ...

随机推荐

  1. matplotlib详细教学

    Matplotlib初相识 认识matplotlib Matplotlib是一个Python 2D绘图库,能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态,动态,交互式的 ...

  2. 关于咪咕视频的m3u8再次解析

    软件和源码 前言 之前写过一片文章: 关于突破咪咕视频付费限制的研究, 但是后来我发现评论说已经不能用了,我知道肯定是api修改了,写这种东西就是这样,不一定什么时候就变化了,然后就用不了了,我懒得继 ...

  3. x=x+=x-=x-x;

    int x=10; x=x+=x-=x-x; // x=x+(x-(x-x)) System.out.println(x); 输出结果20

  4. Selenium4+Python3系列(十二) - 测试框架的设计与开发

    前言 自己从未没想过能使用python来做自动化测试框架的设计.开发. 可能有人会好奇说,六哥,你怎么也用python写测试框架了? 领导说: python你也没有实际工作经验,可能就是自己自学的. ...

  5. C#-将进程注册为子进程,父进程崩溃的时候子进程也随之退出的方案和实例

    C#-将进程注册为子进程,父进程崩溃的时候子进程也随之退出的方案和实例 Kill child process when parent process is killed 我正在使用我的应用程序中的Sy ...

  6. 前端知识之JS(javascirpt)

    目录 JS简介 JS基础 1.注释语法 2.引入JS的多种方式 3.结束符号 变量与常量 基本数据类型 1.数字类型(Number) 2.字符类型(string) 3.布尔类型(Boolean) 4. ...

  7. 同步异步、mutiprocessing创建进程process模块及进程对象的多种方法、消息队列Queue

    目录 同步异步 阻塞与非阻塞 综合使用 创建进程的多种方式之multiprocess.process模块 进程间数据隔离 进程的join方法 IPC机制 生产者 消费者模型 进程对象的多种方法 守护进 ...

  8. Python 大数据量文本文件高效解析方案代码实现

    大数据量文本文件高效解析方案代码实现 测试环境 Python 3.6.2 Win 10 内存 8G,CPU I5 1.6 GHz 背景描述 这个作品来源于一个日志解析工具的开发,这个开发过程中遇到的一 ...

  9. DP经典例题——LIS&LCS

    DP经典例题--LIS&LCS LCS 最长公共子序列,英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列 ...

  10. 洛谷P1605例题分析

    迷宫 题目描述 给定一个 \(N \times M\) 方格的迷宫,迷宫里有 \(T\) 处障碍,障碍处不可通过. 在迷宫中移动有上下左右四种方式,每次只能移动一个方格.数据保证起点上没有障碍. 给定 ...