3664
前几天打的代码一直显示TLE,今天又打了一次,就突然又没问题了……目前正在寻找原因中,以下为正确代码:
#include <stdio.h>
#include <stdlib.h>
#define Elemtype int
#define Status int
#define Max_size 50050
typedef struct
{
Elemtype* elem;
int length;
}Sqlist;
Status gt_sum(Sqlist L,int l,int mid,int r);
Status fz(Sqlist L,int l,int r);
void CreatList(Sqlist *L,int n)
{
L->length=0;
int i;
L->elem=(Elemtype*)malloc(Max_size*sizeof(Elemtype));
for(i=1;i<=n;i++)
{
scanf("%d",&L->elem[i]);
L->length++;
}
}
int count,sum;
Status gt_sum(Sqlist L,int l,int mid,int r)
{
int i,sum1=0,sum2=0,sum=0;
for(i=mid;i>=l;i--)
{
sum+=L.elem[i];
if(sum1<sum) sum1=sum;
}
sum=0;
for(i=mid+1;i<=r;i++)
{
sum+=L.elem[i];
if(sum2<sum) sum2=sum;
}
return sum1+sum2;
}
Status comp(Elemtype a,Elemtype b)
{
if(a>=b) return a;
else return b;
}
Status fz(Sqlist L,int l,int r)
{
count++;
int x,x1,x2,mid,max;
if(r==l) return L.elem[l];
mid=(l+r)/2;
x1=fz(L,l,mid);
x2=fz(L,mid+1,r);
x=gt_sum(L,l,mid,r);
max=comp(x,comp(x1,x2));
return max;
}
int main()
{
int n;
scanf("%d",&n);
Sqlist L;
CreatList(&L,n);
count=0;
sum=fz(L,1,n);
printf("%d %d\n",sum,count);
return 0;
}