Pagini recente » Cod sursa (job #2166238) | Cod sursa (job #1471275) | Cod sursa (job #2746359) | Cod sursa (job #1037351) | Cod sursa (job #2824386)
#include <stdio.h>
#include <ctype.h>
#define MAXN 6'000'000
class ReadOnSteroids {
protected:
static const int BUFSIZE = (128 * 1024);
FILE *fin;
char ibuf[BUFSIZE];
int ibp = BUFSIZE - 1;
bool close;
public:
ReadOnSteroids( char *fname ){
fin = fopen( fname, "r" );
close = true;
}
ReadOnSteroids( FILE *fp ){
fin = fp;
close = false;
}
~ReadOnSteroids(){
if( close )
fclose( fin );
}
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
inline char getch(){
if( (ibp = ((ibp + 1) & (BUFSIZE - 1))) == 0 )
fread( ibuf, sizeof(char), BUFSIZE, fin );
return ibuf[ibp];
}
#pragma GCC diagnostic pop
template<typename T> inline T getnum(){
T n = 0;
char ch, semn = 1;
while( isspace( ch = getch() ) );
if( ch == '-' ){
ch = getch();
semn = -1;
}
do
n = n * 10 + ch - '0';
while( isdigit( ch = getch() ) );
return n * semn;
}
};
int main(){
ReadOnSteroids fin( (char *)"ssm.in" );
FILE *fout = fopen("ssm.out", "w");
int n, i, max, max_sum_i, start, max_start, max_end;
n = fin.getnum<int>();
max = max_sum_i = 0;
max_start = max_end = start = 0;
for( i = 0 ; i < n ; i++ ){
if( max_sum_i < 0 ){
start = i;
max_sum_i = fin.getnum<int>();
}else
max_sum_i += fin.getnum<int>();
if( max_sum_i > max ){
max_start = start;
max_end = i;
max = max_sum_i;
}
}
fprintf(fout, "%d %d %d\n", max, max_start + 1, max_end + 1);
fclose(fout);
return 0;
}