Cod sursa(job #1463475)

Utilizator vladrochianVlad Rochian vladrochian Data 21 iulie 2015 00:32:13
Problema Curcubeu Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <vector>
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(const Upd &crt) {
	vector<int> pos;
	for (int i = min(crt.a, crt.b); i <= max(crt.a, crt.b); i = nxt[i]) {
		if (!col[i]) col[i] = crt.c;
		pos.push_back(i);
	}
	for (int i : pos)
		nxt[i] = nxt[pos.back()];
}

void Print() {
	ofstream fout("curcubeu.out", ios::binary);
	for (int i = 1; i < N; ++i)
		fout << col[i] << "\n";
}

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;
}