Pagini recente » Cod sursa (job #1683717) | Cod sursa (job #1172113)
#include<fstream>
using namespace std;
struct intervale
{
int a,b,c;
};
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
int n;
intervale l[1000005];
int NEXT[1000005],v[1000005];
int main()
{
int i,j,aux;
fin>>n>>l[1].a>>l[1].b>>l[1].c;
for (i=2;i<=n-1;i++)
{
l[i].a=(1LL*l[i-1].a*i)%n;
l[i].b=(1LL*l[i-1].b*i)%n;
l[i].c=(1LL*l[i-1].c*i)%n;
}
for (i=1;i<=n;i++)
NEXT[i]=i;
v[l[n-1].a]=l[n-1].c;
NEXT[l[n-1].a]=l[n-1].b;
for (i=l[n-1].a;i<=l[n-1].b;i++)
{
v[i]=l[n-1].c;
NEXT[i]=l[n-1].a;
}
for (i=n-2;i>=1;i--)
{
v[l[i].a]=l[i].c;
if (NEXT[l[i].a-1])
NEXT[l[i].a]=NEXT[l[i].a-1];
else NEXT[l[i].a]=l[i].b;
for (j=l[i].a+1;j<=l[i].b;j++)
{
while (NEXT[j] && j<=l[i].b)
{
aux=j-1;
j=NEXT[j];
NEXT[j]=NEXT[j-1];
}
if (j<=l[i].b)
{
v[j]=l[i].c;
NEXT[j]=NEXT[j-1];
}
}
if (j+1<=n-1 && j==l[i].b && NEXT[j+1])
NEXT[j+1]=NEXT[j];
}
for (i=1;i<=n-1;i++)
fout<<v[i]<<"\n";
return 0;
}