Cod sursa(job #198218)

Utilizator alex23alexandru andronache alex23 Data 9 iulie 2008 18:42:29
Problema Secventa Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.67 kb
#include <stdio.h>
#include <string.h>
//#include <conio.h>


int pin=0,pf=0,minim,n,i,j,k,poz,min,nr,a[500003],x,y;
char s[2000010];
FILE *f;


void parsare(){
     int i,j,x;
     fscanf(f,"%d%d\n",&n,&k);
     fgets(s,2000010,f);
     for(j=0,i=1;i<=n;++j,++i){
         if(s[j]=='-'){
             for(x=0,j++;s[j]>='0'&&s[j]<='9';++j)
                 x=x*10+(s[j]-48);
             a[i]=x*(-1);
         }
         else{
             for(x=0;s[j]>='0'&&s[j]<='9';++j)
                 x=x*10+(s[j]-48);
             a[i]=x;
         }
     }
  }


int main()
 {//FILE *f;

  f=fopen("secventa.in","r");
  /*fscanf(f,"%d %d",&n,&k);
  fgets(mesaj,1000010,f);
  fgets(mesaj,1000010,f);

  fclose(f);

  i=0;j=0;
  while (i<strlen(mesaj))
    {if (mesaj[i]=='-') {j++;
                         a[j]=0;
                         i++;
                         while ((mesaj[i]>='0')&&(mesaj[i]<='9'))
                                {a[j]=a[j]*10+(mesaj[i]-'0');
                                 i++;
                                 }
                         }
                   else  if ((mesaj[i]>='0')&&(mesaj[i]<='9'))
                             {j++;
                              while ((mesaj[i]>='0')&&(mesaj[i]<='9'))
                                    {a[j]=a[j]*10+(mesaj[i]-'0');
                                     i++;
                                     }
                              }
     i++;
     }
  */
  parsare();
  /*
  for (i=1;i<=n;i++)
     printf("%d ",a[i]);
  getch();
    */
  poz=0;x=y=0;
  for (i=1;i<=n;i++)
      if (poz==0) if (n-i+1>=k) {x=i;y=i+k-1;
                                 min=a[x];nr=1;
                                 for (j=x+1;j<=y;j++)
                                    if (min==a[j]) nr++;
                                              else if (a[j]<min) {min=a[j];
                                                                  nr=1;
                                                                  }
                                 poz=1;
                                 i=y;
                                 if ((pin==0)&&(pf==0)) {pin=x;pf=y;minim=min;}
                                 if (min>minim) {pin=x;pf=y;minim=min;}
                                 }
                           else i=n+1;
             else if (a[i]<min) poz=0;
                           else if (min==a[i]) {x++;y++;}
                                          else if ((a[x]==min)&&(nr>1)) {nr--;
                                                                         x++;
                                                                         y++;
                                                                         }
                                               else
                                               if (a[x]!=min) {x++;y++;}
                                               else
                                               {x++;
                                                y++;
                                                min=a[x];nr=1;
                                                for (j=x+1;j<=y;j++)
                                                   if (min==a[j]) nr++;
                                                         else if (a[j]<min) {min=a[j];
                                                                             nr=1;
                                                                             }
                                                if (min>minim) {pin=x;pf=y;minim=min;}
                                                }

  f=fopen("secventa.out","w");
  fprintf(f,"%d %d %d",pin,pf,minim);
  fclose(f);

  return 0;
  }