题目
对于一个区间 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 L≤x≤R时 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 1≤N≤2∗105
其后N行,每行一对 L , R , 1 ≤ L ≤ R ≤ 1 0 9 L,R ,1\le L\le R \le 10^9 L,R,1≤L≤R≤109
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(l−x,0,x−r) 。
因此,我们要求的是 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,L1−x,x−R1,L2−x,x−R2,…,Lk−x,x−Rk) 的最小值。
这里,我们可以把 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,Ak−x,x−Bk)。
- 如果 A k ⩽ B k A_k\leqslant B_k Ak⩽Bk ,我们让 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 ⌈(Ak−Bk)/2⌉ 。
由于每次都是在前面的基础上进行的,因此无需初始化不断累积输出即可。