2018-7-16 ACM 刷题日记

<Codeforces - 702C>

题意:

    给两个数组,让第一个数组里每个元素,都与第二个数组的每个元素求差再取绝对值,然后找到第一个数组里每一元素对应的这些差值的最小值,再求这些最小值里的最大值。

思路:

    这是在一套二分专题里的一个题,就是一个二分的思路,有两个封装好的二分函数,lower_bound( ) 和 upper_bound( )。这里介绍下 lower_bound( ) 的用法。

比如说有一个数组 p[maxx],角标是从1 ~ n的,那么

int pos = lower_bound(p + 1, p + n + 1, tmp) - p;

上述代码表示,在 p[1] ~ p[n]的范围内,查找第一个大于等于 tmp 的 p 数组的下标。

明确了lower_bound( )的用法,那我就讲下这题思路:

首先传进两个数组 a[ ], b[ ],然后初始化 ans = 0。

接下来初始化 b[0] = -Inf,b[m + 1] = Inf。

初始化b[0]好理解吧,就是如果lower_bound( )得到 b[1],即pos = 1,那么我要的值就是b[1],但是我每次都进行取 b[pos] 和 b[pos - 1] 与 a[i] 差的最小值,所以初始化 b[0] 一个无穷小就行了,而 b[m + 1],之所以要初始化成一个无穷大,就是因为,如果我找遍 1 ~ m 都没找到大于等于 a[i]的值,那我初始化 b[m +1]为无穷大的时候,维护的时候就不会出错,反正就一个编码习惯吧~就使用lower_bound( )的时候,初始化搜索数组 b[ ] 的b[0]负无穷 和 b[m + 1]正无穷即可。

那么我进行这步操作:

int pos = lower_bound(b + 1, b + m + 1, a[i]) - b;

就得到了数组b中第一个大于等于 a[i]的元素位置,由于这两个数组输入都是排好序的,就不用自行sort( )了,这也说明了:

b[pos] 是第一个大于等于 a[i]的位置的值,那就说明 b[pos - 1]是最后一个小于 a[i] 的位置的值。

换言之,b[pos] 和 b[pos - 1] 是离 a[i]最近的两个数,也就是说,取这两者绝对值的最小值,就是当前的 a[i] 与 b[ ] 数组每个元素求差后再取绝对值的最小值,那么再用max维护一下这些最小值里的最大值即可。

本人AC代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll Inf = 1e15;
const int maxx = 1e5 + 7;
int n, m;
ll a[maxx], b[maxx];

int main() {
	scanf("%d %d", &n, &m);
	for(int i = 1; i <= n; i++) scanf("%I64d", &a[i]);
	for(int i = 1; i <= m; i++) scanf("%I64d", &b[i]);
	ll ans = 0;
	b[0] = -Inf, b[m + 1] = Inf;
	for(int i = 1; i <= n; i++) {
		int pos = lower_bound(b + 1, b + m + 1, a[i]) - b;
		ll x = abs(a[i] - b[pos]);
		ll y = abs(a[i] - b[pos - 1]);
		ll minx = min(x, y);
		ans = max(ans, minx);
	}
	cout << ans << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值