[语言月赛 202307] 塔台超频
题目描述
在一条笔直的马路上有 n n n 个塔台,它们被依次标号为 1 , 2 , ⋯ , n 1, 2, \cdots, n 1,2,⋯,n,分别处于距离马路起点 a 1 , a 2 , ⋯ , a n a _ 1, a _ 2, \cdots, a _ n a1,a2,⋯,an( a 1 < a 2 < ⋯ < a n a _ 1 < a _ 2 < \cdots < a _ n a1<a2<⋯<an)的位置。
每个塔台初始时有一个通讯半径 b 1 , b 2 , ⋯ , b n b _ 1, b _ 2, \cdots, b _ n b1,b2,⋯,bn,这代表,对于 i i i 号塔台,其可以与 [ a i − b i , a i + b i ] [a _ i - b _ i, a _ i + b _ i] [ai−bi,ai+bi] 范围内的塔台通讯。
需要特别注意,对于两个塔台 A、B,当且仅当 A 塔台的位置处在 B 塔台的通讯范围内,B 塔台才能向 A 塔台传递信号。请注意这里不是「二者的通讯范围重合,即可通讯」。
现在你可以对这些塔台进行超频。具体的,你可以指定一个电压 k k k,之后所有塔台都会被加上 k k k 的电压,通讯半径都会增大 k k k。这里的 k k k 仅可为非负整数。
现在要求你通过超频,使信号可以从 1 1 1 号塔台依次通过 2 , 3 , ⋯ 2, 3, \cdots 2,3,⋯ 号塔台传输到 n n n 号塔台,但是由于不合理的超频会较严重地磨损塔台,因此你想要尽可能降低超频的电压。
请你计算出,为了达到以上目的,塔台超频需要的最小电压是多少。
输入格式
输入共 n + 1 n + 1 n+1 行。
第一行为一个整数
n
n
n,代表塔台的数量。
接下来
n
n
n 行,每行两个整数
a
i
,
b
i
a _ i, b _ i
ai,bi,分别代表各个塔台的位置和初始通讯半径。
输出格式
输出共一行一个整数,代表为了达到目的,塔台超频需要的最小电压。
样例 #1
样例输入 #1
5
0 4
2 2
3 1
12 8
19 2
样例输出 #1
8
提示说明
数据规模与约定
对于 100 % 100\% 100% 的数据,保证 2 ≤ n ≤ 5 × 1 0 5 2 \leq n \leq 5 \times 10 ^ 5 2≤n≤5×105, 0 ≤ a i , b i ≤ 1 0 9 0 \leq a _ i, b _ i \leq 10 ^ 9 0≤ai,bi≤109。
测试点编号 | 特殊限制 |
---|---|
1 ∼ 2 1 \sim 2 1∼2 | n ≤ 10 n \leq 10 n≤10, a i , b i ≤ 200 a _ i, b _ i \leq 200 ai,bi≤200 |
3 3 3 | a i = i a _ i = i ai=i |
4 ∼ 5 4 \sim 5 4∼5 | b i = 0 b _ i = 0 bi=0 |
6 6 6 | 所有 b i b _ i bi 相同 |
7 ∼ 10 7 \sim 10 7∼10 | 无特殊限制 |
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=5e5+10;
ll a[N],b[N];
int main()
{
ll n;
cin >> n;
for(ll i=0;i<n;i++)
cin>>a[i]>>b[i];
ll k=0;
for(ll i=0;i<n-1;i++)
{
ll d=a[i+1]-a[i];
if(b[i]<d)
k=max(k,d-b[i]);
}
cout<<k<<endl;
return 0;
}