Cod sursa(job #1459637)

Utilizator nnnmmmcioltan alex nnnmmm Data 10 iulie 2015 14:09:35
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<cstdio>
#include<algorithm>
#define NMAX 1000000
int a[NMAX+1],b[NMAX+1],c[NMAX+1];
struct casa{int culoare,urmator;};
casa v[NMAX+1];
int ULTIM;
void coloreaza(int st,int &dr,int cul)
{
 if(v[dr].culoare==0 && dr>=st)
    {
     v[dr].culoare=cul;
     coloreaza(st,v[dr].urmator,cul);
     v[dr].urmator=ULTIM;
    }
 else
    ULTIM=dr;
}
int main()
{
 freopen("curcubeu.in","r",stdin);
 freopen("curcubeu.out","w",stdout);
 int n;
 scanf("%d %d %d %d ",&n,&a[1],&b[1],&c[1]);
 for(int i=2;i<=n-1;i++)
     {
      a[i]=(a[i-1]*i)%n;
      b[i]=(b[i-1]*i)%n;
      c[i]=(c[i-1]*i)%n;
      v[i].urmator=i-1;
     }
 for(int i=n-1;i>=1;i--)
     {
      int st=std::min(a[i],b[i]),dr=std::max(a[i],b[i]);
      if(st!=0 && dr!=0)
         {
          while(dr>=st)
                {
                 coloreaza(st,dr,c[i]);
                 dr=v[dr].urmator;
                }
         }
     }
 for(int i=1;i<=n-1;i++)
     printf("%d ",v[i].culoare);
fclose(stdin);
fclose(stdout);
return 0;
}