Pagini recente » Cod sursa (job #1655583) | Cod sursa (job #1439539) | Cod sursa (job #2706115) | Cod sursa (job #1085617) | Cod sursa (job #674562)
Cod sursa(job #674562)
#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=1;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 - 1;i>0;--i)
if(stramosi[i] == stramosi[*memb])
{
if(i==1)
*memb = 0;
else
++last_s;
}
else
break;
if((int)(*memb - *intr) < 0)
rez.push(0);
else if(*intr == 1)
rez.push(stramosi[*memb]);
else
rez.push(stramosi[*memb - *intr - last_s + 1]);
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;
}