Cod sursa(job #1454285)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 25 iunie 2015 23:55:35
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <iterator>
#include <queue>
#include <functional>
#include <utility>
#define MAX 1000005

using namespace std;

ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");

int L[MAX], R[MAX], c[MAX], Next[MAX], color[MAX];

int findNext(int i);

int main() {
	int n, i, left;

	fin >> n >> L[1] >> R[1] >> c[1];

	for (i = 2; i < n; ++i) {
		L[i] = ((long long)L[i - 1] * i) % n;
		R[i] = ((long long)R[i - 1] * i) % n;
		c[i] = ((long long)c[i - 1] * i) % n;

		if (L[i] > R[i])
			swap(L[i], R[i]);
	}

	for (i = n - 1; i > 0; --i) {
		left = findNext(L[i]);

		while (left <= R[i]) {
			color[left] = c[i];
			Next[left] = R[i] + 1;

			left = findNext(left + 1);
		}
	}

	for (i = 1; i < n; ++i)
		fout << color[i] << '\n';

	return 0;
}

int findNext(int i) {
	if (Next[i] == 0)
		return i;

	return Next[i] = findNext(Next[i]);
}