Cod sursa(job #1518732)

Utilizator hrazvanHarsan Razvan hrazvan Data 6 noiembrie 2015 11:10:39
Problema Curcubeu Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#define MAXN 1000000
FILE *out;
int n, a, b, c;
int arb[4 * MAXN];

void update(int p, int st ,int dr){
  if(st >= a && dr <= b)
    arb[p] = c;
  else{
    int mid = (st + dr) / 2;
    if(arb[p] != 0)
      arb[2 * p + 1] = arb[2 * p + 2] = arb[p];
    arb[p] = 0;
    if(a <= mid)
      update(2 * p + 1, st, mid);
    if(b >= mid + 1)
      update(2 * p + 2, mid + 1, dr);
  }
}

void query(int p, int st, int dr){
  if(st == dr)
    fprintf(out, "%d\n", arb[p]);
  else{
    int mid = (st + dr) / 2;
    if(arb[p] != 0)
      arb[2 * p + 1] = arb[2 * p + 2] = arb[p];
    arb[p] = 0;
    query(2 * p + 1, st, mid);
    query(2 * p + 2, mid + 1, dr);
  }
}

int main(){
  FILE *in = fopen("curcubeu.in", "r");
  int i, ca, cb, cc, aux;
  fscanf(in, "%d%d%d%d", &n, &ca, &cb, &cc);
  fclose(in);
  for(i = 1; i < n; i++){
    a = ca - 1;  b = cb - 1;  c = cc;
    if(a > b){
      aux = a;  a = b;  b = aux;
    }
    update(0, 0, n - 2);
    ca = 1LL * ca * (i + 1) % n;
    cb = 1LL * cb * (i + 1) % n;
    cc = 1LL * cc * (i + 1) % n;
  }
  out = fopen("curcubeu.out", "w");
  query(0, 0, n - 2);
  fclose(out);
  return 0;
}