Pagini recente » Cod sursa (job #1649035) | Cod sursa (job #193971) | Cod sursa (job #1679703) | Cod sursa (job #1524351) | Cod sursa (job #22130)
Cod sursa(job #22130)
#include<stdio.h>
FILE *f=fopen("stramosi.in", "r"), *g=fopen("stramosi.out", "w");
struct nod
{
long om, nr, str, l;
nod *urm;
};
nod *prim, *ultim;
long n, m, max;
long a[3][250001];
void insert(long x,long y, long 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 t;
nod *p;
p=prim;
int d=0;
long 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()
{
long i, x, y;
fscanf(f, "%d%d", &n, &m);
for(i=1; i<=n; i++)
{
fscanf(f, "%ld", &a[0][i]);
a[1][i]=a[0][i];
}
for(i=1; i<=m; i++)
{
fscanf(f, "%ld%ld", &x, &y);
if(y>max)
max=y;
insert(x, y, i);
}
fclose(f);
det_stramos();
sortare();
tipar();
fclose(g);
return 0;
}