Pagini recente » Cod sursa (job #1806507) | Cod sursa (job #2242512)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100000;
const int QMAX = 100000;
const int VMAX = 99999;
int l[VMAX + 5];
int a[NMAX + 5];
int sol[QMAX + 5];
int v[NMAX + 5];
struct Q {
int l, r, i;
bool operator < (const Q& other) const {
return l < other.l;
}
}q[QMAX + 5];
void u(int p, int n, int s) {
for (; p <= n; p += (p & -p))
v[p] = max(v[p], s);
}
int y(int p) {
int x = 0;
for (; p; p -= (p & -p))
x = max(x, v[p]);
return x;
}
int main() {
freopen("pq.in", "r", stdin);
freopen("pq.out", "w", stdout);
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
for (int i = 1; i <= m; ++i) {
scanf("%d%d", &q[i].l, &q[i].r);
q[i].i = i;
}
sort(q + 1, q + m + 1);
int j = m;
for (int i = n; i >= 1; --i) {
if (l[a[i]] != 0)
u(l[a[i]], n, l[a[i]] - i);
l[a[i]] = i;
while (j > 0 && q[j].l == i) {
sol[q[j].i] = y(q[j].r);
j--;
}
}
for (int i = 1; i <= m; ++i)
if (sol[i] == 0)
printf("-1\n");
else
printf("%d\n", sol[i]);
return 0;
}