T650836 区间最长不重复字串

题目背景

[题解](https://www.luogu.me/article/k928p1f6)

题目描述

你是一个长度为 $N$ 的序列 $A$。 一共有 $q$ 次询问,每次询问给你两个整数 $L, R(1 \le L \le R \le N)$。你需要求出 $l, r(L \le l \le r \le R)$ 满足 $A_l \sim A_r$ 互不相同(即不存在任何 $i, j(l \le i < j \le r)$,满足 $A_i = A_j$)**且 $r - l + 1$ 最大**。你只需要输出 $r - l + 1$ 即可。

输入格式

第一行一个正整数 $N(1 \le N \le 2 \times 10^5)$ 表示序列 $A$ 的长度。 第二行一共有 $N$ 个数,第 $i$ 个数表示序列 $A$ 的第 $i$ 个元素 $A_i(1 \le A_i \le 10^5)$。 第三行有一个正整数 $q(1 \le q \le 2 \times 10^5)$,表示一共有 $q$ 次询问。 接下来 $q$ 行,每行有两个正整数 $L, R(1 \le L \le R \le N)$,表示查询 $l, r(L \le l \le r \le R)$ 满足 $A_l \sim A_r$ 互不相同,且 $r - l + 1$ 最大时 $r - l + 1$ 的值。

输出格式

一共 $q$ 行,每行一个正整数。分别表示询问 $L, R$ 时的满足 $L \le l \le r \le R$ 且 $A_l \sim A_r$ 互不相同,且 $r - l + 1$ 最大时 $r - l + 1$ 的值。

说明/提示

对于 $12\%$ 的数据,$N, q \le 500$。 对于 $48\%$ 的数据,$N, q \le 10^3$。 对于 $60\%$ 的数据,$N, q \le 10^4$。 对于另外 $8\%$ 的数据,保证所有 $A_i$ 在序列 $A$ 中出现的次数(包括 $A_i$ 本身)不超过 $2$。 对于另外 $8\%$ 的数据,保证如果 $A_i = A_j$ 且对于所有 $i < k < j$,$A_k \neq A_i$,那么 $|i - j + 1| \le 5$。 对于所有数据,满足 $1 \le N, q \le 2 \times 10^5$,$1 \le A_i \le 10^5(1 \le i \le N)$。 ### 提示 出题人友情提示:本题轻微卡常,请使用较快的输入输出方式,并使用 `std::max` 而不是 `#define max(a,b) ((a)>(b)?(a):(b))`。