Cod sursa(job #2178653)

Utilizator flibiaVisanu Cristian flibia Data 19 martie 2018 17:22:28
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define ll long long
#define L (pos << 1)
#define R (L | 1)

using namespace std;

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

int n, A, B, C, h[4000100];

void update(int st, int dr, int pos, int l, int r){
	if(h[pos] && st != dr)
		h[L] = h[R] = h[pos];
	if(dr < l || st > r || st > dr)
		return;
	int mid = st + dr >> 1;
	if(l <= st && dr <= r){
		h[pos] = C;
		if(st != dr)
			h[L] = h[R] = C;
		return;
	}
	update(st, mid, L, l, r);
	update(mid + 1, dr, R, l, r);
}

void dive(int st, int dr, int pos){
	if(h[pos] && st != dr)
		h[L] = h[R] = h[pos];
	if(st == dr){
		out << h[pos] << '\n';
		return;
	}
	int mid = st + dr >> 1;
	dive(st, mid, L);
	dive(mid + 1, dr, R);
}

int main(){
	in >> n >> A >> B >> C;
	for(int i = 1; i < n; i++){
		if(i > 1){
			A = ((ll)A * (ll)i) % n;
			B = ((ll)B * (ll)i) % n;
			C = ((ll)C * (ll)i) % n;
		}
		update(1, n - 1, 1, max(1, min(A, B)), max(A, B));	
	}
	dive(1, n - 1, 1);
	return 0;
}