Pagini recente » Cod sursa (job #1122105) | Cod sursa (job #600578) | Cod sursa (job #3139172) | Cod sursa (job #2806132) | Cod sursa (job #580471)
Cod sursa(job #580471)
#include<stdio.h>
FILE *f , *g ;
#define LIM 30001
int v[500001] ;
long n , k , pi , ps , poz1 , poz2 , max , min , minn = -LIM;
void citire();
void detmin(long poz1 , long poz2 );
void detmax(long poz1 , long poz2 );
void solve();
void tipar();
int main()
{
citire();
solve();
tipar();
return 0;
}
void citire()
{
f=fopen("secventa.in" , "r" );
fscanf(f , "%ld%ld" , &n, &k );
for ( int i = 1 ; i<= n ; ++i )
fscanf(f , "%d" , &v[i] );
fclose(f);
}
void solve()
{
poz1 = 1;poz2 = k;
min = LIM ;
max = -LIM ;
detmin(1 , k);
detmax(1 , k);
if( min > minn){
pi = poz1 ; ps = poz2 ; minn = min ;
}
for( int i = k+1 ; i<=n ; ++i)
{
if(v[i] >=min && v[i] <= max )
{
poz2 = i;
poz1++;
if(v[i] != min)
detmin(poz1 , poz2);
}
if(v[i] > max )
{
poz2++;
max = v[i] ;
}
if(v[i] < min )
{
poz1 = i+1;
poz2 = i+k;
detmin(poz1 , poz2);
detmax(poz1 , poz2 );
i = i+k ;
}
if( min > minn){
pi = poz1 ; ps = poz2 ; minn = min ;
}
}
}
void detmin(long poz1 , long poz2 )
{
min = LIM;
for ( int i = poz1 ; i <= poz2 ; ++i )
if(v[i] < min)
min = v[i];
}
void detmax(long poz1 , long poz2 )
{
max = -LIM ;
for ( long i = poz1 ; i<= poz2 ; ++i )
if( v[i] > max )
max = v[i] ;
}
void tipar()
{
g=fopen("secventa.out" , "w" );
fprintf(g ,"%ld %ld %d" , pi , ps , minn );
fclose(g);
}