Pagini recente » Cod sursa (job #579810) | Cod sursa (job #1311335) | Cod sursa (job #75143) | Cod sursa (job #2103097) | Cod sursa (job #80830)
Cod sursa(job #80830)
#include <stdio.h>
struct aa{
int poz,nr,initial;
};
aa b[300002];
int c[300000],q;
void QuickSort(int left,int right)
{int l_hold, r_hold;
aa pivot;
l_hold=left;
r_hold=right;
pivot.poz=b[left].poz;
pivot.nr=b[left].nr;
pivot.initial=b[left].initial;
while (left < right)
{
while ((b[right].nr>=pivot.nr) && (left < right))
right--;
if (left != right)
{
b[left].poz=b[right].poz;
b[left].nr=b[right].nr;
b[left].initial=b[right].initial;
left++;
}
while ((b[left].nr<=pivot.nr) && (left < right))
left++;
if (left != right)
{
b[right].poz=b[left].poz;
b[right].nr=b[left].nr;
b[right].initial=b[left].initial;
right--;
}
}
b[left].poz = pivot.poz;
b[left].nr=pivot.nr;
b[left].initial=pivot.initial;
pivot.nr = left;
left = l_hold;
right = r_hold;
if (left < pivot.nr)
QuickSort(left,pivot.nr - 1);
if (right > pivot.nr)
QuickSort(pivot.nr + 1,right);
}
void QuickSort1(int left,int right)
{int l_hold, r_hold;
aa pivot;
l_hold = left;
r_hold = right;
pivot.poz=b[left].poz;
pivot.nr=b[left].nr;
pivot.initial=b[left].initial;
while (left < right)
{
while ((b[right].initial >= pivot.initial) && (left < right))
right--;
if (left != right)
{
b[left].nr = b[right].nr;
b[left].initial=b[right].initial;
b[left].poz=b[right].poz;
left++;
}
while ((b[left].initial <= pivot.initial) && (left < right))
left++;
if (left != right)
{
b[right].nr = b[left].nr;
b[right].initial=b[left].initial;
b[right].poz=b[left].poz;
right--;
}
}
b[left].initial = pivot.initial;
b[left].nr=pivot.nr;
b[left].poz=pivot.poz;
pivot.initial = left;
left = l_hold;
right = r_hold;
if (left < pivot.initial)
QuickSort1(left,pivot.initial - 1);
if (right > pivot.initial)
QuickSort1(pivot.initial + 1,right);
}
int main()
{FILE *fin,*fout;
int n,m,a[300000],i,j,k,p;
fin=fopen("stramosi.in","r");
fout=fopen("stramosi.out","w");
fscanf(fin,"%d %d",&n,&m);
for (i=1;i<=n;i++)
fscanf(fin,"%d",&a[i]);
a[0]=0;
for (i=1;i<=m;i++)
{fscanf(fin,"%d %d",&b[i].poz,&b[i].nr);
b[i].initial=i;
}
QuickSort(1,m);
for (i=1;i<=n;i++)
c[i]=a[i];
q=1;
for (k=1;k<=b[m].nr;k++)
{
while ((q<=m)&&(b[q].nr==k))
{b[q].poz=c[b[q].poz];
q++;
}
for (i=1;i<=n;i++)
c[i]=a[c[i]];
//for (i=1;i<=n;i++)
//a[i]=c[i];
}
QuickSort1(1,m);
for (i=1;i<=m;i++)
fprintf(fout,"%d\n",b[i].poz);
fclose(fin);
fclose(fout);
}