Pagini recente » Cod sursa (job #377469) | Cod sursa (job #830948) | Cod sursa (job #2987831) | Cod sursa (job #2165940) | Cod sursa (job #1894446)
#include <bits/stdc++.h>
using namespace std;
struct q{
int l, r, i;
}Q[100005];
int v[100005], last[100005];
int aint[400005];
int ans[100005];
int qlf, qrg, val;
bool comp(q a, q b){
return a.r < b.r;
}
void update(int pos, int lf, int rg){
if(lf > qlf || rg < qlf){
return;
}
if(lf == rg){
aint[pos] = val;
return;
}
int md = (lf + rg)/2;
update(2 * pos, lf, md);
update(2 * pos + 1, md + 1, rg);
aint[pos] = max(aint[2 * pos], aint[2 * pos + 1]);
}
int query(int pos, int lf, int rg){
if(lf > qrg || rg < qlf){
return 0;
}
if(qlf <= lf && rg <= qrg){
return aint[pos];
}
int md = (lf + rg)/2;
return max(query(2 * pos, lf, md), query(2 * pos + 1, md + 1, rg));
}
int main()
{
freopen("pq.in", "r", stdin);
freopen("pq.out", "w", stdout);
int n,q,i;
scanf("%d %d", &n, &q);
for(i = 1;i <= n;i++){
scanf("%d", &v[i]);
}
for(i = 1;i <= q;i++){
scanf("%d %d", &Q[i].l, &Q[i].r);
Q[i].i = i;
}
sort(Q + 1, Q + q + 1, comp);
int j;
for(i = 1;i <= q;i++){
for(j = Q[i - 1].r + 1;j <= Q[i].r;j++){
if(last[v[j]]){
qlf = last[v[j]];
val = j - last[v[j]];
update(1, 1, n);
}
last[v[j]] = j;
}
qlf = Q[i].l;
qrg = Q[i].r;
ans[Q[i].i] = query(1, 1, n);
}
for(i = 1;i <= q;i++){
if(ans[i] == 0){
ans[i] = -1;
}
printf("%d\n", ans[i]);
}
return 0;
}