Cod sursa(job #1463479)

Utilizator vladrochianVlad Rochian vladrochian Data 21 iulie 2015 00:38:19
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
using namespace std;

const int kMaxN = 1000005;

struct Upd {
	int a, b, c;
} u[kMaxN];

int N, col[kMaxN];
int nxt[kMaxN];

void Init() {
	for (int i = 2; i < N; ++i) {
		u[i].a = ((int64_t)i * u[i - 1].a) % N;
		u[i].b = ((int64_t)i * u[i - 1].b) % N;
		u[i].c = ((int64_t)i * u[i - 1].c) % N;
	}
	for (int i = 1; i < N; ++i)
		nxt[i] = i + 1;
}

void Update(Upd &crt) {
	if (crt.a > crt.b)
		swap(crt.a, crt.b);
	for (int i = crt.a; i <= crt.b; i = nxt[i]) {
		if (!col[i]) col[i] = crt.c;
		nxt[i] = max(nxt[i], crt.b + 1);
	}
}

void Print() {
	freopen("curcubeu.out", "w", stdout);
	for (int i = 1; i < N; ++i)
		printf("%d\n", col[i]);
}

int main() {
	ifstream("curcubeu.in") >> N >> u[1].a >> u[1].b >> u[1].c;
	Init();
	for (int i = N - 1; i; --i)
		Update(u[i]);
	Print();
	return 0;
}