Cod sursa(job #2147669)

Utilizator Constantin.Dragancea Constantin Constantin. Data 28 februarie 2018 21:40:23
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll n, a, b, c, curc, curt;
int A[2097200];

void update(int nod, int st, int dr){
    if (st >= a && dr <=b){
        A[nod] = c;
        return;
    }
    int mid = (st + dr)/2;
    if (a <= mid) update(2*nod, st, mid);
    if (b > mid) update(2*nod + 1, mid+1, dr);

}

int query(int nod, int st, int dr){
    if (st == dr) return A[nod];
    int mid = (st + dr)/2, son;
    if (c <= mid) son = query(2*nod, st, mid);
    else son = query(2*nod+1, mid+1, dr);
    if (!son && A[nod]) son = A[nod];
    return son;
}

int main(){
    ifstream cin ("curcubeu.in");
    ofstream cout ("curcubeu.out");
    cin >> n >> a >> b >> c;
    update(1,1,n);
    for (int i=2; i<n; i++){
        a = (a * i)%n;
        b = (b * i)%n;
        c = (c * i)%n;
        if (b < a) swap(a,b);
        update(1,1,n);
    }
    for (int i=1; i<n; i++){
        c = i;
        cout << query(1,1,n) << "\n";
    }
    return 0;
}