不是,这种题没想出来,如此,如何备战 CSP。
description
给定长度为 \(n\) 的序列 \(a\),以及 \(m\) 个数对 \((l_i,r_i)\)。
你可以进行下列操作至多一次:
- 选择序列 \(a\) 的一个子段,并将其中的每个元素的值都改成任意整数。
你需要保证执行完操作之后,对于每个整数 \(i(1\leq i\leq m)\),都有 \(a[l_i,r_i]\) 中所有元素互不相同。
你需要最小化操作时选择的子段的长度,并求出这个长度的最小值。
特别的如果没有必要进行操作,答案为 \(0\)。
solution
首先考虑这么一件事情,令每个位置如果保留必须需要去掉的一段连续区间 \(l_i, r_i\),我们默认 \(l_i > i\)。这个可以用线段树 cover 操作解决。
然后,我们对于每个左端点,二分右端点,相当于我要判断其他之外的点的最小的 \(l_i\) 和最大的 \(r_i\) 是否被当前的区间覆盖,然后当然我们维护一个前后缀 max / min 即可。
\(l_i, r_i\) 说得详细点就是需要保留目前点必须要覆盖的一些点的连续区间。
君,如无能解此题,如何备战 CSP?
然后自己懒得写代码了。
标签:每个,OI,leq,集贸,打个,操作,CSP From: https://www.cnblogs.com/alexande/p/18474070