题解/算法 {F - InterSections}

题解/算法 {F - InterSections}

@LINK: https://atcoder.jp/contests/abc360/tasks/abc360_f;

现在还不会这个题, 先看一下错误的思路把…

我们把题目中的原区间[l,r] 变成新区间[l+1, r-1]后, 那么假如你选择L,R 他和新区间[l,r]相交 等价于 (L在区间[l,r]里 且R不在) || (R在区间[l,r]里 且L不在);
. 其实后来我发现 这是错误的… 比如原区间[1,10] 新区间是[2,9], 如果按照上面的性质 那么L=9, R=10 是与他相交的, 但其实 他俩是不相交的;
因此上面的正确表述应该是(L在新区间[l,r]里 且R要么>=r+2 要么R<=l-2) || (R在...);
然后 我们令PointsL,R所有的可能取值, 对于任意原区间[l,r]l+1, l-1, r+1, r-1放进去 (不确定正确性);
CovInv[p]: 所有包含p点的新区间的并集区间; CovCont[p]: 所有包含p点的新区间的个数;
. 他怎么求呢? 我们对Points进行排序, 然后对于某点p 我们将所有左端点<=p的区间的右端点rig哈希值 放到线段树里, 于是查询[p, INF]里的最大值 就等于CovInv[p].second;
然后我们枚举答案L端点 得到CovInv[L] = {ll,lr}, 那么关键是 怎么求答案端点R呢? (当然R > L)
. 首先看一个错误做法, 比如CovInv[R] = {rl, rr}, 那么一定满足rl > lr, 这是错误的, 其实lr, rl是可以相交的 只要rl > lr 那么就不存在一个区间 同时覆盖L,R;
于是 你想着 答案端点Rrl 一定满足> L (于是可以用map配合upper_bound>L的最大值);
. 其实这也是错误的… 因为rl是可能<=L的, 此时虽然会存在同时覆盖L,R的区间, 但是这种情况 他可能会有最大的Cont;
. 而且这种做法 可能还是错的… 因为上面讲的 对于一个新区间[l,r] 假如L在其中 那么并不是说R只要不在这个区间 那么L,R就和他相交 不是的 只有当R>=r+2 || L<=l-2时 才对答案有贡献;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值