Pagini recente » Cod sursa (job #2316595) | Cod sursa (job #886231) | Cod sursa (job #310910) | Cod sursa (job #886162) | Cod sursa (job #2693977)
#include <stdio.h>
#define MAX_N 200000
int v[MAX_N], semn[2] = { -1, 1 };
int n, maxS, st, dr;
void ssm() {
int suma, start, i;
maxS = suma = v[0];
st = dr = start = 0;
for ( i = 1; i < n; i++ ) {
if ( suma < 0 ) {
suma = 0;
start = i;
}
suma += v[i];
if ( suma > maxS ) {
maxS = suma;
st = start;
dr = i;
}
}
}
int main() {
FILE *fin, *fout;
int cul, maxSuma, start, len, s, i;
fin = fopen( "buline.in", "r" );
fscanf( fin, "%d", &n );
s = 0;
for ( i = 0; i < n; i++ ) {
fscanf( fin, "%d%d", &v[i], &cul );
v[i] = v[i] * semn[cul];
s += v[i];
}
fclose( fin );
ssm();
for ( i = 0; i < n; i++ )
v[i] = -v[i];
maxSuma = maxS;
start = st;
len = dr - st + 1;
ssm();
if ( maxS + s > maxSuma ) {
maxSuma = maxS + s;
start = dr + 1;
len = n - (dr - st + 1);
}
fout = fopen( "buline.out", "w" );
fprintf( fout, "%d %d %d", maxSuma, start + 1, len );
fclose( fout );
return 0;
}