Cod sursa(job #2708029)

Utilizator AACthAirinei Andrei Cristian AACth Data 18 februarie 2021 10:16:54
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("curcubeu.in");
ofstream g("curcubeu.out");
const int Max = 1e6 + 1;
void nos()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
}
#define color first
#define time second
int n,a,b,c;
struct timestamp
{
    int time;
    int color;
    int endd;
    bool end_this;
} drum[Max];
int timp;

void read()
{
    f>>n>>a>>b>>c;

}
pair < int, int > ans;
void solve()
{
    int i;
    timp = 1;
    drum[min(a,b)].color = c;
    drum[min(a,b)].time = timp;
    drum[max(a,b)+1].endd = timp;
    drum[max(a,b)+1].color = -1;

    for(i=2; i<n; i++)
    {
        timp = i;
        a = (1LL*a * i) % n;
        b = (1LL*b * i) % n;
        c = (1LL*c * i) % n;

        drum[min(a,b)].color = c;
        drum[min(a,b)].time = timp;
        drum[max(a,b)+1].endd = timp;
        drum[max(a,b)+1].end_this = 1;
        // cout<<a<<' '<<b<<' '<<c<<'\n';
    }
    int current_color = 0;
    priority_queue < pair < int , int > > incepute;
    set < int > de_scos;
    for(i=1;i<n;i++)
    {
       // cout<<"here";
        if(drum[i].color >= 1)
            incepute.push({drum[i].time,drum[i].color});
        if(drum[i].end_this)
            de_scos.insert(drum[i].endd);

        while(!incepute.empty() and de_scos.find(incepute.top().first)!=de_scos.end() )
            incepute.pop();
        if(!incepute.empty())
        current_color = incepute.top().second;
        else
            current_color = 0;

        g<<current_color<<'\n';
    }
}
void restart()
{

}

int32_t main()
{
    nos();

    read();
    solve();
    restart();

    return 0;
}