Pagini recente » Cod sursa (job #1165871) | Cod sursa (job #948655) | Cod sursa (job #700007) | Cod sursa (job #2171229) | Cod sursa (job #1709703)
#include <stdio.h>
#include <stdlib.h>
int T[100000];
int stat[100000];
int asd[100000];
int legu[100000];
int A[100000];
int B[100000];
int main()
{
freopen("pq.in","r",stdin);
freopen("pq.out","w",stdout);
int n,q;
scanf("%d%d",&n,&q);
int i,j;
for(i=0;i<n;++i){
scanf("%d",&T[i]);
++stat[T[i]-1];
if(stat[T[i]-1]>1){
legu[asd[T[i]-1]] = i;
}
asd[T[i]-1] = i;
}
for(i=0;i<n;++i){
if(stat[T[i]-1]<=1){
A[i] = -1;
B[i] = -1;
continue;
}
A[i] = legu[i]-i;
B[i] = legu[i];
--stat[T[i]-1];
/*for(j=i+1;j<n;++j){
if(T[j]==T[i]){
A[i] = j-i;
B[i] = j;
--stat[T[i]-1];
break;
}
}*/
}
/*for(i=0;i<n;++i){
//printf("%d ",stat[i]);
printf("%d %d . ",A[i],B[i]);
//printf("%d . ",legu[i]);
}printf("\n");*/
int l,r;
int max;
for(i=0;i<q;++i){
scanf("%d%d",&l,&r);
max =-1;
for(j=l-1;j<r;++j){
if(B[j]<r){
if(A[j]>max){
max = A[j];
}
}
}
printf("%d\n",max);
}
return 0;
}