Pagini recente » Cod sursa (job #3039639) | Cod sursa (job #1269786) | Cod sursa (job #1645941) | Cod sursa (job #2326168) | Cod sursa (job #51946)
Cod sursa(job #51946)
#include <stdio.h>
#include <stdlib.h>
long int v[5001] , st[5001] ;
char s[3505] ;
int main()
{
FILE *in , *out ;
in = fopen("e:\\klausprj\\in\\secventa.in" , "rt") ;
out = fopen("e:\\klausprj\\out\\secventa.out" , "wt") ;
long int n , k , inc , sf , max , x , y , i, j = 0 ;
fscanf(in , "%ld %ld\n" , &n , &k) ;
inc = 1 ;
sf = 1 ;
// fscanf(in , "%ld" , &v[1]) ;
// fscanf(in , "%s" , s) ;
fgets(s , 1000 , in) ;
v[1] = atoi(s) ;
st[1] = 1 ;
max = 0 ;
for(i = 2 ; i <= k - 1 ; k++)
{
// fscanf(in , "%ld" , &v[i]) ;
while(s[j] != ' ') j++ ;
j++ ;
v[i] = atoi(&s[j]) ;
while(v[st[sf]] > v[i] && sf >= inc) sf -- ;
st[++sf] = i ;
}
for( ; i <= n ; i++)
{
// fscanf(in , "%ld" , &v[i]) ;
while(s[j] != ' ') j++ ;
j++ ;
v[i] = atoi(&s[j]) ;
while(v[st[sf]] > v[i] && sf >= inc) sf -- ;
st[++sf] = i ;
if(v[st[inc]] > max)
{
max = v[st[inc]] ;
x = i - k + 1 ;
y = i ;
}
if(st[inc] == i - k + 1) inc++ ;
}
if(k == 1)
{
x = 1 ;
y = 1 ;
for(i = 2 , max = v[1] ; i <= n ; i++) if(max < v[i])
{
max = v[i] ;
x = i ;
y = i ;
}
fprintf(out , "%ld %ld %ld" , x , y , max) ;
}
else fprintf(out , "%ld %ld %ld" , x , y , max) ;
fclose(in) ;
fclose(out) ;
return 0 ;
}