Cod sursa(job #652329)

Utilizator Victor10Oltean Victor Victor10 Data 24 decembrie 2011 00:25:49
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
void swap(int &a,int &b){
	int c;
	c=a;
	a=b;
	b=c;
}
int a[6000005],sc[6000005],sd[6000005];
int main(){
	freopen("ssm.in","r",stdin);
	freopen("ssm.out","w",stdout);
	int n,i,lg,SMAX=-99999999,S,pr,ult,j,lgmin=99999999;
	scanf("%d",&n);
	for(i=1;i<=n;++i){
		scanf("%d",&a[i]);
		sc[i]=a[i];
		sd[i]=a[i];
		sc[i]=sc[i]+sc[i-1];
	}
	for(i=n-1;i>=1;--i)
		sd[i]=sd[i]+sd[i+1];
	for(i=1;i<=n;++i)
		for(j=i+1;j<=n;++j){
			S=sd[i]-sd[j];
			if(j>i)
				lg=j-i+1;
			else	
				lg=i-j+1;
			if(S>SMAX){
				SMAX=S;
				if(i<j){
					pr=i;
					ult=j-1;
					lgmin=lg;
				}
				else{
					pr=j;
					ult=i-1;
					lgmin=lg;
				}
			}
			else
				if(S==SMAX&&lg<lgmin){
					SMAX=S;
					if(i<j){
						pr=i;
						ult=j;
						lgmin=lg;
					}
					else{
						pr=j;
						ult=i;
						lgmin=lg;
					}
				}
		}
	for(i=1;i<=n;++i){
		printf("%d ",sc[i]);
	}
	printf("\n");
	for(i=1;i<=n;++i)
		printf("%d ",sd[i]);
	printf("\n");
	//if(ult==n-1)
		//++ult;
	printf("%d %d %d",SMAX,pr,ult);
}