Cod sursa(job #396942)

Utilizator beyond_k7aOnutu Catalin beyond_k7a Data 16 februarie 2010 09:14:09
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
using namespace std;
int a[100000],minn,n,i;
int getmax(int i, int j)
{
	int k,mx=a[i];
	for(k=i;k<=j;k++)
		if(mx<a[k])
			mx=a[k];
	return mx;
}
int main()
{
	ifstream f("secv7.in");
	ofstream g("secv7.out");
	
	
	f>>n;
	minn=1;
	for(i=1;i<=n;i++)
	{
		f>>a[i];
		if(a[i]<a[minn])
			minn=i;
	}	
	if(minn!=1 && minn!=n)
	{
		if(a[1]+a[2]+getmax(3,n)<getmax(1,minn-1)+getmax(minn+1,n)+a[minn])
		{
			g<<a[1]+a[2]+getmax(3,n)<<'\n';
			g<<"1"<<" 2";
		}
		else 
		{
			if(a[n]+a[n-1]+getmax(1,n-2)<getmax(1,minn-1)+getmax(minn+1,n)+a[minn])
			{
				g<<a[n]+a[n-1]+getmax(1,n-2)<<'\n';
				g<<n-2<<" "<<n-1;
			}
			else
			{
				g<<getmax(1,minn-1)+getmax(minn+1,n)+a[minn]<<"\n";
				g<<minn-1<<" "<<minn;
			}
		}
		
	}
	else
	{
		int x,y;
		if(minn==1)
		{
		 x=1;
		 if(a[2]<a[n])
			 y=2;
		 else
			 y=n-1;
		}
		else
		{
			y=n-1;
			if(a[n-1]<a[1])
				x=n-2;
			else
				x=1;
		}
		
		g<<getmax(1,x)+getmax(x+1,y)+getmax(y+1,n)<<"\n";
		g<<x<<" "<<y;
	}

	
	
	f.close();
	g.close();
	return 0;
}