Cod sursa(job #1902079)

Utilizator virtualityBbbbbbbbbbbbbbbbbb virtuality Data 4 martie 2017 13:20:11
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<bits/stdc++.h>
#define N 1000020
using namespace std;
typedef long long LL;
int a[N], b[N], c[N];
int k[N], s[N];
int find(int x){
	int r=x, y;
	while(k[x])x=k[x];
/*	while(k[r]!=r){
		y=k[r];
		k[r]=x;
		r=y;
	}*/
	return x;
}
void unite(int a, int b, int c){
	if(a>b) swap(a, b);
	while(a<=b){
		if(s[a]) a=find(a);
		if(a <= b){
			s[a]=c;
			k[a]=b+1;
			a++;
		}
	}
}
int main(){
	int i, n;
	freopen("curcubeu.in", "r", stdin);
	freopen("curcubeu.out", "w", stdout);
	scanf("%d%d%d%d", &n, &a[1], &b[1], &c[1]);
	for(i=2;i<n;i++) {
		a[i]=((LL)a[i-1]*i)%n;
		b[i]=((LL)b[i-1]*i)%n;
		c[i]=((LL)c[i-1]*i)%n;
	}
	for(i=n-1;i>=1;i--)unite(a[i], b[i], c[i]);
	for(i=1;i<n;i++) printf("%d\n", s[i]);
	return 0;
}