Cod sursa(job #674541)

Utilizator michael9ufoStanescu Mihai michael9ufo Data 6 februarie 2012 15:01:12
Problema Stramosi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <iostream>
#include <cstdio>
#include <queue>

using namespace std;

int main()
{

    unsigned n, m, i, P;

    int *stramosi = new int[250001], Q;

    FILE *in, *out;

    in = fopen("stramosi.in", "r");

    fscanf(in, "%d %d", &n, &m);

    for(i=0;i<n;++i)
        fscanf(in, "%d", &stramosi[i]);

    queue<int>intrebari[2];

    for(i=1;i<=m;++i)
    {

        fscanf(in, "%d %d", &Q, &P);

        intrebari[0].push(Q);
        intrebari[1].push(P);

    }

    fclose(in);

    unsigned *intr;
    int *memb;
    unsigned last_s;

    queue<unsigned>rez;

    while(!intrebari[0].empty())
    {

        intr = new unsigned;
        memb = new int;

        last_s = 0;

        *memb = intrebari[0].front();
        *intr = intrebari[1].front();

        for(i=*memb;i>0;--i)
        {

            if(stramosi[i - 3] == stramosi[*memb - 2])
                ++last_s;
            else
                break;

        }

        if((int)(*memb - *intr) < 0)
            rez.push(0);
        else if(*intr == 1)
            rez.push(stramosi[*memb - 1]);
        else
            rez.push(stramosi[*memb - *intr - last_s]);

        intrebari[0].pop();
        intrebari[1].pop();

        last_s = *intr;

        delete memb;
        delete intr;
    }


    delete[] stramosi;

    out = fopen("stramosi.out", "w");

    while(!rez.empty())
    {

        fprintf(out, "%d\n", rez.front());

        rez.pop();

    }

    fclose(out);

    return 0;

}