Pagini recente » Cod sursa (job #2231145) | Cod sursa (job #2356167) | Cod sursa (job #2136569) | Istoria paginii concurs-mihai-patrascu-2013/clasament | Cod sursa (job #2969186)
//Ilie Dumitru
#include<cstdio>
const int NMAX=1000005;
int N, ans[NMAX], A, B, C;
int segTree[NMAX<<2];
void segTreeSet(int node, int l, int r)
{
if(A<=l && r<=B)
segTree[node]=C;
else
{
if(l<r && segTree[node])
segTree[(node<<1)|1]=segTree[(node<<1)+2]=segTree[node], segTree[node]=0;
int mid=l+((r-l)>>1);
if(A<=mid)
segTreeSet((node<<1)|1, l, mid);
if(mid<B)
segTreeSet((node<<1)+2, mid+1, r);
}
}
void segTreeGet(int node, int l, int r)
{
if(segTree[node])
for(register int i=l;i<=r;++i)
ans[i]=segTree[node];
else if(l<r)
{
int mid=(l+r)>>1;
segTreeGet((node<<1)|1, l, mid);
segTreeGet((node<<1)+2, mid+1, r);
}
}
int main()
{
FILE* f=fopen("curcubeu.in", "r"), *g=fopen("curcubeu.out", "w");
int i, aux;
fscanf(f, "%d%d%d%d", &N, &A, &B, &C);
if(B<A)
{
aux=A;
A=B;
B=aux;
}
fclose(f);
for(i=1;i<N;++i)
{
segTreeSet(1, 0, N-1);
A=A*(i+1)%N;
B=B*(i+1)%N;
if(B<A)
{
aux=A;
A=B;
B=aux;
}
C=C*(i+1)%N;
}
segTreeGet(1, 0, N-1);
for(i=1;i<N;++i)
fprintf(g, "%d\n", ans[i]);
fclose(g);
return 0;
}