Pagini recente » Cod sursa (job #1845906) | Cod sursa (job #3224453) | Cod sursa (job #2172094) | Cod sursa (job #1793315) | Cod sursa (job #571810)
Cod sursa(job #571810)
#include<stdio.h>
int A[400002];
int N;
int MAX = 0;
int MIN = 111111;
int nrmax = -11111;
int P = 1;
int L = 0;
int P2;
int L2;
int MAX2;
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;
MAX += A[i];
}
for(int i=1;i<=N;i++)
A[i+N] = A[i];
fclose(f);
}
void calc(void)
{
int s = 0;
int pi = 1;
for(int i=1;i<=N+N;i++)
{
if(s<0)
s += A[i];
else
{
s = A[i];
pi = i;
}
if(s<MIN && pi+N>i)
{
MIN = s;
P = pi;
L = i-pi+1;
}
}
}
void calc2(void)
{
int s = 0;
int pi = 1;
for(int i=1;i<=N+N;i++)
{
if(s>0)
s += A[i];
else
{
s = A[i];
pi = i;
}
if(s>MAX2 && pi+N>i)
{
MAX2 = s;
P2 = pi;
L2 = i-pi+1;
}
}
}
int main()
{
FILE *f = fopen("buline.out","w");
citire();
calc();
calc2();
P = (P+L)%N;
if(!P) P = N;
if(MAX2>MAX-MIN)
fprintf(f,"%d %d %d",MAX2,P2,L2);
else
fprintf(f,"%d %d %d",MAX-MIN,P,N-L);
fclose(f);
return 0;
}