ARC129 B-dist

题目

对于一个区间 L , R L,R L,R,我们定义函数dist(L,R,X)

x < L x < L x<L时 dist(L,R,X) = L-X

L ≤ x ≤ R L\le x \le R LxR时 dist(L,R,X) = 0

x > R x > R x>R时 dist(L,R,X) = X-R

给你n个区间 L , R L,R L,R,编号从1到n,对于每个 k = 1 , 2 , . . N k=1,2,..N k=1,2,..N,输出对于前k个区间,任意选一个X的话最大dist最小是多少

Input

第一行输入一个N, 1 ≤ N ≤ 2 ∗ 1 0 5 1\le N \le 2*10^5 1N2105
其后N行,每行一对 L , R , 1 ≤ L ≤ R ≤ 1 0 9 L,R ,1\le L\le R \le 10^9 L,R,1LR109

Output

输出n行,第i行代表当前i个区间的dist最大值最小是多少

Samples

3
1 3
2 4
5 6
0
0
1

思路

首先理解一下最大的 d i s t dist dist 函数,即对于 d i s t ( l , r , x ) = m a x ( l − x , 0 , x − r ) dist(l,r,x)=max(l-x,0,x-r) dist(l,r,x)=max(lx,0,xr)
因此,我们要求的是 m a x ( 0 , L 1 − x , x − R 1 , L 2 − x , x − R 2 , … , L k − x , x − R k ) max(0,L_1-x,x-R_1,L_2-x,x-R_2, … ,L_k-x,x-R_k) max(0,L1x,xR1,L2x,xR2,,Lkx,xRk) 的最小值。

这里,我们可以把 A k = m a x ( L 1 , L 2 , … , L k ) A_k = max(L_1,L_2,…,L_k) Ak=max(L1,L2,,Lk) B k = m a x ( R 1 , R 2 , … , R k ) B_k=max(R_1,R_2,…,R_k) Bk=max(R1,R2,,Rk) 改写成 m a x ( 0 , A k − x , x − B k ) max(0,A_k-x,x-B_k) max(0,Akx,xBk)

  • 如果 A k ⩽ B k A_k\leqslant B_k AkBk ,我们让 x = A k x=A_k x=Ak, 结果为 0 0 0
  • 如果 B k < A k B_k < A_k Bk<Ak ,最优解是使 x = ⌊ ( A k + b k ) / 2 ⌋ x=\lfloor (A_k+b_k)/2 \rfloor x=⌊(Ak+bk)/2,满足最小值为 ⌈ ( A k − B k ) / 2 ⌉ \lceil (A_k-B_k)/2 \rceil ⌈(AkBk)/2

由于每次都是在前面的基础上进行的,因此无需初始化不断累积输出即可。

猜你喜欢

转载自blog.csdn.net/skyflying266/article/details/126528392
129
arc
今日推荐