from collections import defaultdict
class FenwickTree:
def __init__(self, x):
self.bit = x
for i in range(len(x)):
j = i | (i + 1)
if j < len(x):
x[j] += x[i]
def update(self, idx, x):
while idx < len(self.bit):
self.bit[idx] += x
idx |= idx + 1
def query(self, end):
x = 0
while end:
x += self.bit[end - 1]
end &= end - 1
return x
class Seg:
def __init__(self, n):
N = 1
while N < n:
N <<= 1
self.N = N
self.t = [-1] * (2 * N)
def set(self, i, v):
i += self.N
self.t[i] = v
i //= 2
while i:
a = self.t[2 * i]
b = self.t[2 * i + 1]
self.t[i] = a if a > b else b
i //= 2
def prefmax(self, r):
l = self.N
r = r + self.N + 1
res = -1
while l < r:
if l & 1:
v = self.t[l]
if v > res: res = v
l += 1
if r & 1:
r -= 1
v = self.t[r]
if v > res: res = v
l //= 2
r //= 2
return res
n = int(input())
arr = list(map(int, input().split()))
pos = defaultdict(list)
for i, v in enumerate(arr):
pos[v].append(i)
ok = [-1] * n
for v, lst in pos.items():
m = len(lst)
if m == 1:
ok[lst[0]] = n - 1
continue
d = [lst[i + 1] - lst[i] for i in range(m - 1)]
r = [0] * (m - 1)
r[m - 2] = m - 2
for i in range(m - 3, -1, -1):
if d[i] == d[i + 1]:
r[i] = r[i + 1]
else:
r[i] = i
for t in range(m):
if t == m - 1:
reach_idx = t
else:
reach_idx = r[t] + 1
if reach_idx + 1 < m:
nxt = lst[reach_idx + 1]
else:
nxt = n
ok[lst[t]] = nxt - 1
adds = [[] for _ in range(n)]
dels = [[] for _ in range(n)]
prev = {}
for i in range(n):
adds[prev.get(arr[i], -1) + 1].append(i)
dels[i].append(i)
prev[arr[i]] = i
q = int(input())
queries = [[] for _ in range(n)]
for i in range(q):
l, r = map(int, input().split())
l -= 1
r -= 1
queries[l].append((r, i))
bit = FenwickTree([0] * (n + 1))
seg = Seg(n)
res = [0] * q
for i in range(n):
for p in adds[i]:
bit.update(p, 1)
seg.set(p, ok[p])
for r, idx in queries[i]:
distinct = bit.query(r + 1)
pm = seg.prefmax(r)
add = 0 if pm >= r else 1
res[idx] = distinct + add
for p in dels[i]:
bit.update(p, -1)
seg.set(p, -1)
print("\n".join(map(str, res)))
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmNsYXNzIEZlbndpY2tUcmVlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgogICAgICAgIHNlbGYuYml0ID0geAogICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih4KSk6CiAgICAgICAgICAgIGogPSBpIHwgKGkgKyAxKQogICAgICAgICAgICBpZiBqIDwgbGVuKHgpOgogICAgICAgICAgICAgICAgeFtqXSArPSB4W2ldCgogICAgZGVmIHVwZGF0ZShzZWxmLCBpZHgsIHgpOgogICAgICAgIHdoaWxlIGlkeCA8IGxlbihzZWxmLmJpdCk6CiAgICAgICAgICAgIHNlbGYuYml0W2lkeF0gKz0geAogICAgICAgICAgICBpZHggfD0gaWR4ICsgMQoKICAgIGRlZiBxdWVyeShzZWxmLCBlbmQpOgogICAgICAgIHggPSAwCiAgICAgICAgd2hpbGUgZW5kOgogICAgICAgICAgICB4ICs9IHNlbGYuYml0W2VuZCAtIDFdCiAgICAgICAgICAgIGVuZCAmPSBlbmQgLSAxCiAgICAgICAgcmV0dXJuIHgKCmNsYXNzIFNlZzoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKICAgICAgICBOID0gMQogICAgICAgIHdoaWxlIE4gPCBuOgogICAgICAgICAgICBOIDw8PSAxCiAgICAgICAgc2VsZi5OID0gTgogICAgICAgIHNlbGYudCA9IFstMV0gKiAoMiAqIE4pCgogICAgZGVmIHNldChzZWxmLCBpLCB2KToKICAgICAgICBpICs9IHNlbGYuTgogICAgICAgIHNlbGYudFtpXSA9IHYKICAgICAgICBpIC8vPSAyCiAgICAgICAgd2hpbGUgaToKICAgICAgICAgICAgYSA9IHNlbGYudFsyICogaV0KICAgICAgICAgICAgYiA9IHNlbGYudFsyICogaSArIDFdCiAgICAgICAgICAgIHNlbGYudFtpXSA9IGEgaWYgYSA+IGIgZWxzZSBiCiAgICAgICAgICAgIGkgLy89IDIKCiAgICBkZWYgcHJlZm1heChzZWxmLCByKToKICAgICAgICBsID0gc2VsZi5OCiAgICAgICAgciA9IHIgKyBzZWxmLk4gKyAxCiAgICAgICAgcmVzID0gLTEKICAgICAgICB3aGlsZSBsIDwgcjoKICAgICAgICAgICAgaWYgbCAmIDE6CiAgICAgICAgICAgICAgICB2ID0gc2VsZi50W2xdCiAgICAgICAgICAgICAgICBpZiB2ID4gcmVzOiByZXMgPSB2CiAgICAgICAgICAgICAgICBsICs9IDEKICAgICAgICAgICAgaWYgciAmIDE6CiAgICAgICAgICAgICAgICByIC09IDEKICAgICAgICAgICAgICAgIHYgPSBzZWxmLnRbcl0KICAgICAgICAgICAgICAgIGlmIHYgPiByZXM6IHJlcyA9IHYKICAgICAgICAgICAgbCAvLz0gMgogICAgICAgICAgICByIC8vPSAyCiAgICAgICAgcmV0dXJuIHJlcwoKbiA9IGludChpbnB1dCgpKQphcnIgPSBsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCgpwb3MgPSBkZWZhdWx0ZGljdChsaXN0KQpmb3IgaSwgdiBpbiBlbnVtZXJhdGUoYXJyKToKICAgIHBvc1t2XS5hcHBlbmQoaSkKCm9rID0gWy0xXSAqIG4KZm9yIHYsIGxzdCBpbiBwb3MuaXRlbXMoKToKICAgIG0gPSBsZW4obHN0KQogICAgaWYgbSA9PSAxOgogICAgICAgIG9rW2xzdFswXV0gPSBuIC0gMQogICAgICAgIGNvbnRpbnVlCiAgICBkID0gW2xzdFtpICsgMV0gLSBsc3RbaV0gZm9yIGkgaW4gcmFuZ2UobSAtIDEpXQogICAgciA9IFswXSAqIChtIC0gMSkKICAgIHJbbSAtIDJdID0gbSAtIDIKICAgIGZvciBpIGluIHJhbmdlKG0gLSAzLCAtMSwgLTEpOgogICAgICAgIGlmIGRbaV0gPT0gZFtpICsgMV06CiAgICAgICAgICAgIHJbaV0gPSByW2kgKyAxXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJbaV0gPSBpCiAgICBmb3IgdCBpbiByYW5nZShtKToKICAgICAgICBpZiB0ID09IG0gLSAxOgogICAgICAgICAgICByZWFjaF9pZHggPSB0CiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmVhY2hfaWR4ID0gclt0XSArIDEKICAgICAgICBpZiByZWFjaF9pZHggKyAxIDwgbToKICAgICAgICAgICAgbnh0ID0gbHN0W3JlYWNoX2lkeCArIDFdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbnh0ID0gbgogICAgICAgIG9rW2xzdFt0XV0gPSBueHQgLSAxCgphZGRzID0gW1tdIGZvciBfIGluIHJhbmdlKG4pXQpkZWxzID0gW1tdIGZvciBfIGluIHJhbmdlKG4pXQpwcmV2ID0ge30KZm9yIGkgaW4gcmFuZ2Uobik6CiAgICBhZGRzW3ByZXYuZ2V0KGFycltpXSwgLTEpICsgMV0uYXBwZW5kKGkpCiAgICBkZWxzW2ldLmFwcGVuZChpKQogICAgcHJldlthcnJbaV1dID0gaQoKcSA9IGludChpbnB1dCgpKQpxdWVyaWVzID0gW1tdIGZvciBfIGluIHJhbmdlKG4pXQpmb3IgaSBpbiByYW5nZShxKToKICAgIGwsIHIgPSBtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpCiAgICBsIC09IDEKICAgIHIgLT0gMQogICAgcXVlcmllc1tsXS5hcHBlbmQoKHIsIGkpKQoKYml0ID0gRmVud2lja1RyZWUoWzBdICogKG4gKyAxKSkKc2VnID0gU2VnKG4pCnJlcyA9IFswXSAqIHEKCmZvciBpIGluIHJhbmdlKG4pOgogICAgZm9yIHAgaW4gYWRkc1tpXToKICAgICAgICBiaXQudXBkYXRlKHAsIDEpCiAgICAgICAgc2VnLnNldChwLCBva1twXSkKICAgIGZvciByLCBpZHggaW4gcXVlcmllc1tpXToKICAgICAgICBkaXN0aW5jdCA9IGJpdC5xdWVyeShyICsgMSkKICAgICAgICBwbSA9IHNlZy5wcmVmbWF4KHIpCiAgICAgICAgYWRkID0gMCBpZiBwbSA+PSByIGVsc2UgMQogICAgICAgIHJlc1tpZHhdID0gZGlzdGluY3QgKyBhZGQKICAgIGZvciBwIGluIGRlbHNbaV06CiAgICAgICAgYml0LnVwZGF0ZShwLCAtMSkKICAgICAgICBzZWcuc2V0KHAsIC0xKQoKcHJpbnQoIlxuIi5qb2luKG1hcChzdHIsIHJlcykpKQ==