Pagini recente » Cod sursa (job #1020671) | Cod sursa (job #734215) | Cod sursa (job #1843425) | Cod sursa (job #2322092) | Cod sursa (job #2396440)
#include <fstream>
using namespace std;
ifstream fin("split.in");
ofstream fout("split.out");
int n,i,j,k,v[5005],minst[5005],maxst[5005],mindr[5005],maxdr[5005];
int main()
{
fin >> n;
for (i=1; i<=n; i++)
fin >> v[i];
minst[1] = maxst[1] = v[1];
for (i=2; i<=n; i++)
{
minst[i] = min(minst[i-1], v[i]);
maxst[i] = max(maxst[i-1], v[i]);
}
mindr[n] = maxdr[n] = v[n];
for (i=n-1; i>=1; i--)
{
mindr[i] = min(mindr[i+1], v[i]);
maxdr[i] = max(maxdr[i+1], v[i]);
}
int costmax = 0; int isolsol = 0; int jsolsol = 0; int ksolsol = 0;
for (j=4; j<=n-4; j++)
{
int minim1 = v[j]; int maxim1 = v[j]; int maxx1 = 0;
int isol = 0; int ksol = 0;
for (i=j-1; i>=3; i--)
{
minim1 = min(minim1, v[i]);
maxim1 = max(maxim1, v[i]);
if (maxim1-minim1+maxst[i-1]-minst[i-1] >= maxx1)
{
maxx1 = maxim1-minim1+maxst[i-1]-minst[i-1];
isol = i;
}
}
int minim2 = v[j+1]; int maxim2 = v[j+1]; int maxx2 = 0;
for (k=j+2; k<=n-2; k++)
{
minim2 = min(minim2, v[k]);
maxim2 = max(maxim2, v[k]);
if (maxim2-minim2+maxdr[k+1]-mindr[k+1] > maxx2)
{
maxx2 = maxim2-minim2+maxdr[k+1]-mindr[k+1];
ksol = k;
}
}
if (maxx1+maxx2 > costmax)
{
costmax = maxx1+maxx2;
isolsol = isol-1; jsolsol = j; ksolsol = ksol;
}
}
fout << costmax << "\n" << isolsol << " " << jsolsol << " " << ksolsol;
return 0;
}