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 @   HappyBobb  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示