Pagini recente » Cod sursa (job #1649111) | Cod sursa (job #421268) | Cod sursa (job #2670751) | Cod sursa (job #1503290) | Cod sursa (job #151182)
Cod sursa(job #151182)
#include<stdio.h>
#include<malloc.h>
#define fin "secv2.in"
#define fout "secv2.out"
const int NMax=50001;
int N,K,Secv[NMax];
int RezInceput,RezSfarsit;
long RezSuma = 0;
void indata()
{
FILE *f=fopen(fin,"r");
fscanf(f,"%d%d",&N,&K);
for(int i = 1; i <= N; i++)
fscanf(f,"%d",Secv + i);
fclose(f);
}
void solve()
{
int *SecvTemp, SumTemp, InceputTemp, SfarsitTemp, SumTempMax, InceputTempMax, SfarsitTempMax, NSecvTemp;
int TabelPN[3][NMax] = {0}, IndexTabel = 1, IndexTemp;
int i,j;
SumTemp = 0;
for(i = 1; i <= N; i++)
{
TabelPN [0] [IndexTabel++] = Secv [i];
if(Secv [i] >= 0)
{
TabelPN [1] [IndexTabel - 1] = i;
j = i + 1;
while(Secv [j] >= 0)
{
TabelPN [0] [IndexTabel] += Secv [j];
j++;
}
TabelPN [2] [IndexTabel - 1] = j - 1;
}
else
{
TabelPN [1] [IndexTabel - 1] = i;
j = i + 1;
while(Secv [j] < 0)
{
TabelPN [0] [IndexTabel] += Secv [j];
j++;
}
TabelPN [2] [IndexTabel - 1] = j - 1;
}
}
IndexTabel--;
for(i = 1; i <= IndexTabel; i++)
{
IndexTemp = i;
SumTemp = TabelPN [0] [IndexTemp];
InceputTemp = TabelPN [1] [IndexTemp];
while(1)
{
SfarsitTemp = TabelPN [2] [IndexTemp];
if ( TabelPN [0] [IndexTemp + 1] >= 0)
{
SumTemp += TabelPN [0] [++ IndexTemp];
}
else if ( TabelPN [0] [IndexTemp + 1] + TabelPN [0] [IndexTemp + 2] >= 0 && IndexTemp + 2 <= IndexTabel)
{
SumTemp += TabelPN [0] [++ IndexTemp];
SumTemp += TabelPN [0] [++ IndexTemp];
}
else break;
}
if(SumTemp > SumTempMax)
{
SumTempMax = SumTemp;
InceputTempMax = InceputTemp;
SfarsitTempMax = SfarsitTemp;
}
}
/*
for(i = 1; i <= N; i++)
{
NSecvTemp = N - i + 1;
SecvTemp = (int *) malloc (NSecvTemp * sizeof(int));
InceputTemp = i;
SecvTemp [i] = Secv [i];
for(j = i+1; j <= N; j++)
{
SecvTemp [j] = SecvTemp [j-1] + Secv [j];
if(SecvTemp [j] > SumTemp)
{
SumTemp = SecvTemp [j];
SfarsitTemp = j;
}
}
if(SumTemp > SumTempMax)
{
SumTempMax = SumTemp;
InceputTempMax = InceputTemp;
SfarsitTempMax = SfarsitTemp;
}
SecvTemp = NULL;
}*/
RezSuma = SumTempMax;
RezInceput = InceputTempMax;
RezSfarsit = SfarsitTempMax;
}
void outdata()
{
FILE *f=fopen(fout,"w");
fprintf(f,"%d %d %ld", RezInceput, RezSfarsit, RezSuma);
fclose(f);
}
int main()
{
indata();
solve();
outdata();
return 0;
}