Cod sursa(job #3188730)

Utilizator tudor_costinCostin Tudor tudor_costin Data 3 ianuarie 2024 19:15:14
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
const int Nmax=1e6+5;
int c[Nmax];
vector<pair<int,int>> ev[Nmax];
stack<int> st;
int close[Nmax];
int main()
{
    int n,a,b;
    fin>>n;
    fin>>a>>b>>c[1];
    ev[min(a,b)].push_back({1,0});
    ev[max(a,b)+1].push_back({1,1});
    for(int i=2;i<=n-1;i++)
    {
        a=(a*i)%n;
        b=(b*i)%n;
        c[i]=(c[i-1]*i)%n;
        ev[min(a,b)].push_back({i,0});
        ev[max(a,b)+1].push_back({i,1});
    }
    for(int i=1;i<n;i++)
    {
        sort(ev[i].begin(),ev[i].end());
        for(int j=0;j<ev[i].size();j++)
        {
            if(ev[i][j].second==0)
            {
                st.push(ev[i][j].first);
            }
            else close[ev[i][j].first]=1;
        }
        while(!st.empty() && close[st.top()]==1)
        {
            st.pop();
        }
        if(st.empty()) fout<<0<<'\n';
        else fout<<c[st.top()]<<'\n';
    }
    return 0;
}