前后缀分离,CF1209 C. Maximal Intersection

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

Problem - 1029C - Codeforces


二、解题报告

1、思路分析

线段相交具有可重复贡献性:整个区间的交等价于把区间分为若干部分,分别求交再求交

那么我们只需维护每个线段的前后缀区间的线段交

然后枚举删除的线段,删除后的最大线段交就是前缀交线段和后缀交线段的交

2、复杂度

时间复杂度: O(n) 空间复杂度:O(n)

3、代码详解

import sys
from math import inf
# sys.stdin = open('in.txt', 'r')

input = lambda: sys.stdin.readline().strip()
write = lambda x: sys.stdout.write(str(x))

n = int(input())
lines = [tuple(map(int, input().split())) for _ in range(n)]

prel, prer = [-inf] * n, [inf] * n

for i in range(1, n):
    prel[i] = max(lines[i - 1][0], prel[i - 1])
    prer[i] = min(lines[i - 1][1], prer[i - 1])
sufl, sufr = -inf, inf

ans = 0

for i in range(n - 1, -1, -1):
    ans = max(ans, min(sufr, prer[i]) - max(sufl, prel[i]))
    sufl = max(sufl, lines[i][0])
    sufr = min(sufr, lines[i][1])
write(ans)

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EQUINOX1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值