Cod sursa(job #1709954)

Utilizator UPT_SyntaxErrorUPT SyntaxError UPT_SyntaxError Data 28 mai 2016 14:34:55
Problema Pq Scor 0
Compilator c Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.54 kb
#include <stdio.h>
#include <stdlib.h>

int n, q, i,x, nr,j,k, l,r,m;
int *v[100000];
int a[100000];

int bin(int k, int key){

    int m,p,u;

    p=1;
    u = v[k][0];

    while (p < u) {
        m = (p + u) / 2;
        if (v[k][m] < key)
            p = m + 1;
        else
            u = m;
    }

    m = (p + u) / 2;
    if (v[k][m] < key)
       ++ m;
    return m;

}

int main()
{
    freopen("pq.in", "r", stdin);
    freopen("pq.out", "w", stdout);

    scanf("%d %d", &n, &q);

    for(i = 0; i<n; i++)
    {
        scanf("%d", &x);

        if(a[x]==0)
        {
            nr++;
            v[nr] = (int*)(malloc(sizeof(int)*12));
            v[nr][0] = 1;
            v[nr][1] = i+1;
            a[x] = nr;
        }
        else
        {
            if(v[a[x]][0]%10==0)
                v[a[x]] = realloc(v[a[x]], sizeof(int)*(v[a[x]][0]+11));
            v[a[x]][0]++;
            v[a[x]][v[a[x]][0]] = i+1;
        }


    }

    for(k=0; k<q; k++)
    {
        scanf("%d %d", &l, &r);
        m = -1;

        for(i=1; i<=nr; i++)
        {
            for(j=/*1*/bin(i, l); j<=v[i][0]; j++)
            {

                if(v[i][j]<l) continue;
                if(v[i][j]>=r) break;

                if(j<v[i][0] && v[i][j+1]<=r && v[i][j+1]-v[i][j]>m)
                    m = v[i][j+1]-v[i][j];
            }

            if(m==r-l) break;
        }

        printf("%d\n", m);

    }


    //afis
    /*for(i=1; i<=nr; i++)
    {
        for(j=1; j<=v[i][0]; j++)
            printf("%d ",v[i][j]);
        printf("\n");
    }*/

    return 0;
}