Pagini recente » Cod sursa (job #82533) | Cod sursa (job #1144619) | Cod sursa (job #1552080) | Cod sursa (job #2887560) | Cod sursa (job #1026415)
#include <iostream>
#include <fstream>
#define nmax 1000005
using namespace std;
bool used[nmax];
int v[nmax], p[nmax];
int n, A[nmax], B[nmax], C[nmax], L, R, color;
int find(int x) {
int y = x, z;
while(p[y] >= 0) y = p[y];
while(p[x] >= 0) {
z = p[x];
p[x] = y;
x = z;
}
return x;
}
int main() {
ifstream f("curcubeu.in");
ofstream g("curcubeu.out");
f>>n;
f>>A[1]>>B[1]>>C[1];
for(int i=2; i<n; i++) {
A[i] = (A[i-1] * i) % n;
B[i] = (B[i-1] * i) % n;
C[i] = (C[i-1] * i) % n;
}
//for(int i=1; i<n; i++) cout<<min(A[i], B[i])<<" "<<max(A[i], B[i])<<" "<<C[i]<<"\n"; cout<<"\n";
for(int i=1; i<n; i++) p[i] = -1;
for(int t=n-1; t>=1; t--) {
L = min(A[t], B[t]);
R = A[t] + B[t] - L;
color = C[t];
for(int i=L; i<=R; ) {
if(!used[i]) {
used[i] = true;
v[i] = color;
if(used[i-1]) {
p[i] = find(i-1);
p[p[i]]--;
}
i++;
}
else {
i = find(i);
i -= p[i];
}
}
//for(int i=1; i<n; i++) cout<<v[i]<<" "; cout<<"\n";
}
for(int i=1; i<n; i++) g<<v[i]<<"\n";
//for(int i=1; i<n; i++) cout<<p[i]<<" "; cout<<"\n";
return 0;
}