Pagini recente » Coding Camp Alcatraz | Cod sursa (job #2926759) | Cod sursa (job #716748) | Cod sursa (job #2548240) | Cod sursa (job #1915399)
#include <fstream>
using namespace std;
ifstream fin ("curcubeu.in");
ofstream fout ("curcubeu.out");
inline unsigned int FATHER (unsigned int node);
inline void QUERY (unsigned int left, unsigned int right, unsigned int colour);
unsigned int N;
unsigned int A[1000001], B[1000001], C[1000001];
unsigned int tree[1000001];
unsigned int start, finish, start1;
unsigned int i, j;
unsigned int sol[1000001];
int main ()
{
/// READ
fin >> N >> A[1] >> B[1] >> C[1];
/// SOLVE
for (i=2; i<=N-1; i++)
{
A[i] = (A[i-1]*i)%N;
B[i] = (B[i-1]*i)%N;
C[i] = (C[i-1]*i)%N;
}
for (i=N-1; i>=1; i--)
{
if (A[i] > B[i])
swap(A[i],B[i]);
QUERY(A[i],B[i],C[i]);
}
/// PRINT
for (i=1; i<=N-1; i++)
fout << sol[i] << '\n';
return 0;
}
inline unsigned int FATHER (unsigned int node)
{
if (tree[node] == 0)
return node;
tree[node] = FATHER(tree[node]);
return tree[node];
}
inline void QUERY (unsigned int left, unsigned int right, unsigned int colour)
{
while (left <= right)
{
if (sol[left] != 0)
left = FATHER(left);
if (left <= right)
{
sol[left] = colour;
tree[left] = right + 1;
left++;
}
}
}