首页 > 其他分享 >CF1534G A New Beginning 题解

CF1534G A New Beginning 题解

时间:2024-12-26 21:42:09浏览次数:3  
标签:lazyr 题解 比雪夫 long second push New Beginning define

题目传送门

前置知识

曼哈顿距离与切比雪夫距离的相互转化

解法

将切比雪夫距离转换成曼哈顿距离,有新坐标为 \((\frac{x_{i}+y_{i}}{2},\frac{x_{i}-y_{i}}{2})\),因带一个 \(\frac{1}{2}\) 的常数不妨提出来得到 \((x_{i}'=x_{i}+y_{i},y_{i}'=x_{i}-y_{i})\) 最后统一乘起来。

此时切比雪夫坐标系里 \((x,y)\) 向上/右走分别对应曼哈顿坐标系里走到 \((x+1,y+1)/(x+1,y-1)\),即走路斜率对应 \(1/-1\)。

将所有点按照横坐标排序后,设 \(f_{i,j}\) 表示处理第 \(i\) 个点时纵坐标为 \(j\) 时的最小花费,状态转移方程为 \(f_{i,j}=\min\limits_{k=j-(x_{i}'-x_{i-1}')}^{j+(x_{i}'-x_{i-1}')}\{ f_{i-1,k} \} +|j-y_{i}'|\),使用 Slope Trick 优化即可,做法和 [ABC217H] Snuketoon 基本类似。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
pair<ll,ll>a[800010];
priority_queue<ll,vector<ll>,less<ll> >l;
priority_queue<ll,vector<ll>,greater<ll> >r;
int main()
{
// #define Isaac
#ifdef Isaac
	freopen("in.in","r",stdin);
	freopen("out.out","w",stdout);
#endif
	ll n,ans=0,x,y,lazyl=0,lazyr=0,i;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>x>>y;
		a[i].first=x+y;
		a[i].second=x-y;
		l.push(0);
		r.push(0);
	}
	sort(a+1,a+1+n);
	for(i=1;i<=n;i++)
	{
		lazyl-=a[i].first-a[i-1].first;
		lazyr+=a[i].first-a[i-1].first;
		if(a[i].second<l.top()+lazyl)
		{
			ans+=(l.top()+lazyl)-a[i].second;
			r.push(l.top()+lazyl-lazyr);
			l.pop();
			l.push(a[i].second-lazyl);
			l.push(a[i].second-lazyl);
		}
		else
		{
			if(a[i].second>r.top()+lazyr)
			{	
				ans+=a[i].second-(r.top()+lazyr);
				l.push(r.top()+lazyr-lazyl);
				r.pop();
				r.push(a[i].second-lazyr);
				r.push(a[i].second-lazyr);
			}
			else
			{
				l.push(a[i].second-lazyl);
				r.push(a[i].second-lazyr);
			}
		}
	}
	cout<<ans/2<<endl;
	return 0;
}

标签:lazyr,题解,比雪夫,long,second,push,New,Beginning,define
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18634238

相关文章

  • IntelliJ IDEA 2024.3 安装教程与激活方法(附常见问题解决)
    IntelliJIDEA概述IntelliJIDEA是JetBrains公司推出的一款功能强大的Java集成开发环境(IDE),凭借其丰富的功能和工具集,极大地提升了开发者的编程效率和工作体验。温馨提示:本文中的方法仅供学习交流使用,如果条件允许,请支持正版软件。删除旧版本IntelliJIDEA如果您的电脑中已......
  • Loadrunner Controller cannot create Vusers.Ensure that your load...问题解决
    问题完成脚本录制后,直接打开Controller,选择保存的脚本,进行run,运行失败,提示:LoadrunnerControllercannotcreateVusers.Ensurethatyourloadgeneratorsareavailableandthatyourscriptarevalid. 原因第一次直接在controller中选择打开脚本,不能主动识别出本机可......
  • HNOI2016 序列 题解
    HNOI2016序列题解我做离线版本时往了偏序方向想,但是发现非常麻烦。直到看到了在线版本的容斥做法,发现既好写又跑得快。首先考虑容斥,我们不妨把一个询问\([L,R]\)中最小值的位置\(pos\)求出来。子区间跨过\(pos\),贡献即\((pos-L+1)\times(R-pos+1)\timesa_{pos}\)。......
  • 蓝桥杯 第 24 场 强者挑战赛 题解上(1-3题)
    原题链接https://www.lanqiao.cn/oj-contest/senior-24/   标记名字【算法赛】一条横幅,在1/N,2/N,3/N···(N-1)/N的地方标记一次,若之前标记过这则不用再标记,求f(N)=此时新标记的个数。 上思路读懂题后,重点在于确定该题的思考方向,也就是,新标记的点......
  • P11331 题解
    blog。写了好几天,人都要死了。提供一个不同的切入口,方便大家理解这个分段是在干嘛,以及一个更容易的线段树DS。题解一堆废话,大家看看就行(\(O(N^3)\)先把\(a_i\ne-1\)且无论如何无法成为前缀max的位置ban掉。由于答案只与premax的位置有关,于是设\(dp_{i,j}\)表示确定......
  • P10936 导弹防御塔 题解
    题目链接题目大意城堡有m个敌人、n个能发射导弹的防御塔。导弹的速度固定,都为v。导弹需要T1秒发射,T2分钟冷却,还需要防御塔到敌人距离的dis/v的时间。给定防御塔和敌人的坐标,求需要多少分钟能够消灭所有敌人。推导思路如果短的时间能够消灭所有敌人,则长的也一定能。所......
  • P10952 聚会 题解
    题目链接题目大意对于一棵树,求出一个点对于给定的三个点(以下简称$x$,$y$,$z$且可以重复)距离最短。题解对于点的距离,不难想到LCA处理。而对于本题,则有两种情况。第一问三点中有一为另外两个点的祖先时,所求目标点(以下简称$v$)的深度(简称$d_v$)一定在三点深度之间。三......
  • rust-analyzer 引入含有openssl包报错(openssl未找到)问题解决方案
    1.下载openssl编译后的包https://slproweb.com/products/Win32OpenSSL.html选择完全包2.安装注意下面这一步把dll安装到/bin所在的同级目录一路回车,最后的捐款可以不选3.设置环境变量经过实验,主要的环境变量有3个OPENSSL_DIR="C:\ProgramFiles\OpenSSL-Win64"这......
  • ARC101E题解
    前言此片题解大致按照笔者做题思路进行讲解。简要题意有一棵树,树上有偶数个节点。你需要给这些点两两配对,一组已经配对的点会将两点之间的树边进行一次覆盖。一组合法方案需要满足树上所有边都被覆盖至少一次,求合法方案数。数据范围:\(n\le5000\)。思路首先我们去观察题目性......
  • PyTorch 入门指南:安装流程、应用示例与问题解法
    安装PyTorch环境准备确保你的系统安装了Python。PyTorch支持Python3.6及以上版本。可以从Python官方网站(https://www.python.org/)下载并安装。建议使用虚拟环境(如venv或conda)来隔离项目依赖。以conda为例,你可以使用以下命令创建一个新的环境:condacreate-npytorch_env......