给定 nnn 个数 a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,⋯,an,mmm 次询问,每次询问给定 x,yx, yx,y,问这 nnn 个数里是否有两个数 i,ji, ji,j,满足 1≤i≤j≤n1 \leq i \leq j \leq n1≤i≤j≤n,ai=xa_i = xai=x,aj=ya_j = yaj=y。多组数据。
显然每次暴力枚举是 O(n2mt)O(n^2 mt)O(n2mt) 的复杂度,其中 ttt 是数据组数。
考虑预处理。
对于询问 x,yx, yx,y,显然如果存在 i,ji, ji,j,满足 1≤i≤j≤n1 \leq i \leq j \leq n1≤i≤j≤n,ai=xa_i = xai=x,aj=ya_j = yaj=y,那么所有 i′,j′i^{\prime}, j^{\prime}i′,j′ 满足 i′<ii^{\prime} < ii′<i ,j′>jj^{\prime} > jj′>j,ai′=xa_{i^{\prime}} = xai′=x,aj′=ya_{j^{\prime}} = yaj′=y 也一定满足原有性质,即 i′≤j′i^{\prime} \leq j^{\prime}i′≤j′。
设 fif_ifi 表示 iii 在 nnn 个数中第一次出现的位置,lil_ili 表示 iii 在 nnn 个数中最后一次出现的位置,若 fx≤lyf_x \leq l_yfx≤ly,则存在 i,ji, ji,j,否则不存在。
使用 map 每组数据预处理,复杂度 O(∑(nlogn)+∑m)O(\sum (n \log n) + \sum m)O(∑(nlogn)+∑m)。
map
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现