Cod sursa(job #264967)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 23 februarie 2009 01:21:47
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<stdio.h>
#include<string.h>
FILE*fin=fopen("curcubeu.in","r");
FILE*fout=fopen("curcubeu.out","w");
#define ll long long
#define nm 1000005
int a[nm],b[nm],c[nm],next[nm],ans[nm],n;
int main()
{
  int i,st,dr,v;
  fscanf(fin,"%d%d%d%d",&n,&a[1],&b[1],&c[1]);
  for(i=2;i<n;i++)
  {
    a[i]=(ll)(a[i-1]*i)%n;
    b[i]=(ll)(b[i-1]*i)%n;
    c[i]=(ll)(c[i-1]*i)%n;
    if(a[i]>b[i]) a[i]^=b[i]^=a[i]^=b[i];
  }
  for(i=0;i<n;i++)
    next[i]=i+1;
  memset(ans,0,sizeof(ans));
  for(i=n-1;i>=1;i--)
  {
    st=a[i];
    dr=b[i];
    while(st<=dr)
    {
      if(!ans[st]) ans[st]=c[i];
      v=st;
      st=next[st];
      if(dr>next[v]) next[v]=dr;
    }
  }
  for(i=1;i<n;i++)
    fprintf(fout,"%d\n",ans[i]);
  fclose(fin);
  fclose(fout);
  return 0;
}