Cod sursa(job #198212)
Utilizator | Data | 9 iulie 2008 18:25:02 | |
---|---|---|---|
Problema | Secventa | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.6 kb |
#include <stdio.h>
#include <string.h>
int pin=0,pf=0,minim,n,i,j,k,poz,min,nr,a[500003],x,y;
char mesaj[1000010];
int main()
{FILE *f;
f=fopen("secventa.in","r");
fscanf(f,"%d %d",&n,&k);
fgets(mesaj,1024,f);
fgets(mesaj,1024,f);
fclose(f);
i=0;j=0;
while (i<strlen(mesaj))
{if (mesaj[i]=='-') {i++;j++;a[j]=-(mesaj[i]-'0');}
else if ((mesaj[i]>='0')&&(mesaj[i]<='9')) {j++;a[j]=mesaj[i]-'0';}
i++;
}
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;
}