CF1702C Train and Queries

题意

给定 nn 个数 a1,a2,,ana_1, a_2, \cdots, a_nmm 次询问,每次询问给定 x,yx, y,问这 nn 个数里是否有两个数 i,ji, j,满足 1ijn1 \leq i \leq j \leq nai=xa_i = xaj=ya_j = y。多组数据。

做法

显然每次暴力枚举是 O(n2mt)O(n^2 mt) 的复杂度,其中 tt 是数据组数。

考虑预处理。

对于询问 x,yx, y,显然如果存在 i,ji, j,满足 1ijn1 \leq i \leq j \leq nai=xa_i = xaj=ya_j = y,那么所有 i,ji^{\prime}, j^{\prime} 满足 i<ii^{\prime} < ij>jj^{\prime} > jai=xa_{i^{\prime}} = xaj=ya_{j^{\prime}} = y 也一定满足原有性质,即 iji^{\prime} \leq j^{\prime}

fif_i 表示 iinn 个数中第一次出现的位置,lil_i 表示 iinn 个数中最后一次出现的位置,若 fxlyf_x \leq l_y,则存在 i,ji, j,否则不存在。

使用 map 每组数据预处理,复杂度 O((nlogn)+m)O(\sum (n \log n) + \sum m)

posted @ 2022-07-12 12:53  HappyBobb  阅读(11)  评论(0)    收藏  举报  来源