Cod sursa(job #1709703)

Utilizator space_tab_endlnSapientia CryptoAllnight space_tab_endln Data 28 mai 2016 13:31:05
Problema Pq Scor 0
Compilator c Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.33 kb
#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;
}