Pagini recente » Cod sursa (job #1688686) | Cod sursa (job #942375) | Cod sursa (job #2945695) | Cod sursa (job #2620585) | Cod sursa (job #571511)
Cod sursa(job #571511)
#include<stdio.h>
int A[200001];
int N;
int MAX;
int P;
int L;
void citire(void)
{
int a;
int b;
FILE *f = fopen("buline.in","r");
fscanf(f,"%d ",&N);
for(int i=1;i<=N;i++)
{
fscanf(f,"%d %d",&a,&b);
if(b)
A[i] = a;
else
A[i] = -a;
}
for(int i=1;i<=N;i++)
printf("%d ",A[i]);
fclose(f);
}
void calc(void)
{
int s = -11111;
int pi = 1;
for(int i=1;i<=N;i++)
{
if(s>0)
s += A[i];
else
{
s = A[i];
pi = i;
}
if(s>MAX)
{
MAX = s;
P = pi;
L = i-pi+1;
}
}
int s1 = 0;
if(s)
{
int j;
for(j=1;j<=N && s1<=0;j++)
s1 += A[j];
if(s+s1>MAX)
{
MAX = s+s1;
P = pi;
L = N-pi+1 + j-1;
}
for(int i=j;i<=N && s>=0;i++)
{
if(s1>=0)
s1 += A[i];
if(s+s1>MAX)
{
MAX = s+s1;
P = pi;
L = N-pi+1 + i;
}
}
}
}
int main()
{
FILE *f = fopen("buline.out","w");
citire();
calc();
fprintf(f,"%d %d %d",MAX,P,L);
fclose(f);
return 0;
}