Pagini recente » Cod sursa (job #3254247) | Cod sursa (job #310470) | Cod sursa (job #1587190) | Cod sursa (job #2101885) | Cod sursa (job #41333)
Cod sursa(job #41333)
#include <cstdio>
const int NMAX = 1 << 18;
const int INF = 0x3f3f3f3f;
int N, S, mx, st, l, g, p;
int A[NMAX];
void read() {
FILE *fin = fopen("buline.in", "rt");
int i, t;
fscanf(fin, " %d", &N);
g = INF;
for (i = 0; i < N; ++i) {
fscanf(fin, " %d %d", A + i, &t);
if (t == 1) A[i] = -A[i];
if (A[i] < g)
g = A[i], p = i;
S -= A[i];
}
fclose(fin);
}
void maxim_seq() {
int i, s, cs;
mx = st = l = 0;
for (cs = -1, s = i = 0; i < N; ++i) {
s += A[i];
if (s > mx)
mx = s, st = cs + 1, l = i - cs;
if (s < 0) s = 0, cs = i;
}
}
void write() {
FILE *fout = fopen("buline.out", "wt");
if (l < N)
fprintf(fout, "%d %d %d\n", S + mx, (st + l) % N + 1, N - l);
else
fprintf(fout, "%d %d 1\n", -g, p);
fclose(fout);
}
int main() {
read();
maxim_seq();
write();
return 0;
}