Cod sursa(job #1345892)

Utilizator tudorv96Tudor Varan tudorv96 Data 17 februarie 2015 22:02:17
Problema Curcubeu Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <vector>
#include <fstream>
#include <map>
using namespace std;

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

const int N = 1e6 + 5;

int n, a, b, c, k, f[N], crt;

vector <pair <int, int> > vin[N], vout[N];
vector <pair <int, int> > stiva;

void update(int &a, int &b, int &c) {
    int A = min(a, b), B = max(a, b);
    vin[A].push_back(make_pair (c, k));
    vout[B].push_back(make_pair (c, k++));
}

int main() {
    fin >> n >> a >> b >> c;
    update(a, b, c);
    for (int i = 2; i < n; ++i) {
        a = (1LL * a * i) % n;
        b = (1LL * b * i) % n;
        c = (1LL * c * i) % n;
        update(a, b, c);
    }
    for (int i = 1; i < n; ++i) {
        for (vector <pair <int, int> > :: iterator it = vin[i].begin(); it != vin[i].end(); ++it) {
            f[it->second] = it->first;
            if (it->second > crt)
                crt = it->second;
        }
        while (crt && !f[crt])
            crt--;
        fout << f[crt] << "\n";
        for (vector <pair <int, int> > :: iterator it = vout[i].begin(); it != vout[i].end(); ++it)
            f[it->second] = 0;
    }
}