Pagini recente » Cod sursa (job #2310097) | Cod sursa (job #328019) | Cod sursa (job #549192) | Cod sursa (job #1729007) | Cod sursa (job #157755)
Cod sursa(job #157755)
#include<stdio.h>
#define INPUT "secv2.in"
#define OUTPUT "secv2.out"
#define NMax 50002
FILE *fin = fopen(INPUT, "r"),*fout = fopen(OUTPUT, "w");
long n, k;
long poz[ NMax ], sum[ NMax ];
void readValues();
void quick(long, long);
void solveFunction();
void printSolution(long, long, long);
int main()
{
readValues();
quick( 1, n);
solveFunction();
fclose(fin);
fclose(fout);
return 0;
}
void readValues()
{
long val;
fscanf(fin, "%ld %ld", &n, &k);
for(long i = 1; i <= n; ++i)
{
fscanf(fin, "%ld", &val);
sum[ i ] = sum[ i - 1 ] + val;
poz[ i ] = i;
}
}
void quick(long st, long dr)
{
long l = st, m = dr;
while( l != m)
{
if(( l < m && sum[ l ] > sum[ m ]) || ( l > m && sum[ l ] < sum[ m ]))
{
sum[ l ] = sum[ l ] + sum[ m ];
sum[ m ] = sum[ l ] - sum[ m ];
sum[ l ] = sum[ l ] - sum[ m ];
poz[ l ] = poz[ l ] + poz[ m ];
poz[ m ] = poz[ l ] - poz[ m ];
poz[ l ] = poz[ l ] - poz[ m ];
l = l + m;
m = l - m;
l = l - m;
if ( l < m )
--m;
else
++m;
}
else
{
if( l < m)
--m;
else
++m;
}
}
if( l != st) quick( st, l - 1);
if( l != dr) quick( l + 1, dr);
}
void solveFunction()
{
int l = 1;
for( long i = n; i > 0 && l; --i)
{
for(long j = 1; j <= n && l; ++j)
{
if (poz[ i ] - poz[ j ] >= k)
{
printSolution(poz[ j ], poz[ i ], sum[ i ] - sum [ j ]);
l = 0;
}
}
}
}
void printSolution(long start, long stop, long value)
{
fprintf(fout, "%ld %ld %ld\n", start + 1, stop, value);
}