Pagini recente » Cod sursa (job #21231) | Cod sursa (job #25866) | Cod sursa (job #2133275) | Clasament dotcom2012-runda3 | Cod sursa (job #26007)
Cod sursa(job #26007)
#include <stdio.h>
#define INF (-1)*2000000001
#define MAXN (1 << 18)
int N, A[MAXN], best[MAXN], Pos[MAXN], sum, S, P, L;
void solve(void)
{
int i, t, r, ind;
S = INF;
for(i = N; i >= 1; i--)
{
if(A[i] >= A[i]+best[i+1])
best[i] = A[i], Pos[i] = i;
else
best[i] = A[i]+best[i+1], Pos[i] = Pos[i+1];
}
for(i = 1; i <= N; i++)
if(best[i] > S)
S = best[i], P = i, L = Pos[i]-i+1;
for(i = 1; i <= N; i++)
sum += A[i];
for(ind = 1, r = t = 0, i = 2; i < N; i++)
{
if(sum > S)
S = sum, P = i, L = N+1-i+ind;
sum -= A[i];
t += A[i];
if(t > r)
sum = sum-r+t, r = t, ind = i;
}
}
void read_data(void)
{
int i, j, k;
scanf("%d\n", &N);
for(i = 1; i <= N; i++)
{
scanf("%d %d\n", &j, &k), A[i] = j;
if(k == 0)
A[i] *= (-1);
}
}
void write_data(void)
{
printf("%d %d %d\n", S, P, L);
}
int main(void)
{
freopen("buline.in", "rt", stdin);
freopen("buline.out", "wt", stdout);
read_data();
solve();
write_data();
return 0;
}