Pagini recente » Cod sursa (job #15976) | Cod sursa (job #1002283) | Cod sursa (job #1584938) | Cod sursa (job #1528313) | Cod sursa (job #17748)
Cod sursa(job #17748)
#include<stdio.h>
FILE *f=fopen("stramosi.in", "r"), *g=fopen("stramosi.out", "w");
struct nod
{
int om, nr, str, l;
nod *urm;
};
nod *prim, *ultim;
int n, max;
long m;
void insert(int x,int y, int i)
{
nod *p, *q, *r;
p=new nod;
p->om=x;
p->nr=y;
p->str=0;
p->l=i;
p->urm=NULL;
q=prim;
while(q && q->nr<y)
{
r=q;
q=q->urm;
}
if(q==prim)
if(prim==NULL)
prim=ultim=p;
else
{
p->urm=prim;
prim=p;
}
else
if(r==ultim)
{
ultim->urm=p;
ultim=p;
}
else
{
r->urm=p;
p->urm=q;
}
}
void det_stramos(int a[3][10000])
{
int t;
nod *p;
p=prim;
int d=0;
int i, j;
for(j=1; j<=max; j++)
{
while(j==p->nr)
{
p->str=a[1+d][p->om];
p=p->urm;
}
for(i=1; i<=n && j<max; i++)
{
t=a[0][i];
a[2-d][i]=a[1+d][t];
}
d=1-d;
}
}
void sortare()
{
nod *p, *q, *r;
int ord=0;
while(ord==0)
{
ord=1;
p=prim;
while(p)
{
if(p->l>p->urm->l && p->urm)
{
ord=0;
q=p->urm;
if(p==prim)
{
p->urm=q->urm;
q->urm=p;
prim=q;
}
else
{
r->urm=q;
p->urm=q->urm;
q->urm=p;
}
}
r=p;
p=p->urm;
}
}
}
void tipar()
{
nod *p;
p=prim;
while(p)
{
fprintf(g, "%d\n", p->str);
p=p->urm;
}
fclose(g);
}
int main()
{
int a[3][10000], i, x, y;
fscanf(f, "%d%ld", &n, &m);
for(i=1; i<=n; i++)
{
fscanf(f, "%d", &a[0][i]);
a[1][i]=a[0][i];
}
for(i=1; i<=m; i++)
{
fscanf(f, "%d%d", &x, &y);
if(y>max)
max=y;
insert(x, y, i);
}
fclose(f);
det_stramos(a);
sortare();
tipar();
return 0;
}