Cod sursa(job #2092458)

Utilizator AndreiStanescuAlloys Nokito AndreiStanescu Data 21 decembrie 2017 18:25:25
Problema Subsecventa de suma maxima Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 4.04 kb
//tort-ONI, 2016
/*#include<bits/stdc++.h>
#define N 502
using namespace std;
char a[N][N];
int n,m;
void read()
{
    ifstream fin("tort3.in");
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        {fin>>(a[i]+1);
        //cout<<a[i]+1<<endl;
        }

}

void dynamic()
{
    ofstream cout("tort3.out");
    int li=-1,c1,c2,i,j,lm[N][N],ii,jj;
    while(li)
    {
    li=0;
    for(i=1;i<=n;i++)
    {
    for(j=1;j<=m;j++)
    {
        if(a[i][j]!='-')
        {
            lm[i][j]=1;
            if(a[i][j]==a[i-1][j] && a[i][j]==a[i-1][j-1] && a[i][j]==a[i][j-1])
                lm[i][j]=max(lm[i][j],1+min(lm[i-1][j-1],min(lm[i-1][j],lm[i][j-1])));

        if(lm[i][j]>li)
        {
            li=lm[i][j];
            c1=i;
            c2=j;
        }
        }
        else lm[i][j]=0;

    }
    }
  if(li) cout<<li<<' '<<c1<<' '<<c2<<'\n';
    //strerg
    for(ii=c1-li+1;ii<=c1;ii++)
        for(jj=c2-li+1;jj<=c2;jj++)
        a[ii][jj]='-';

    }

}

void dynamic_opt()
{ofstream cout("tort3.out");
    int li=0,c1,c2,i,j,lm[N][N],ii,jj;
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
        if(a[i][j]!='-')
        {
            lm[i][j]=1;
            if(a[i][j]==a[i-1][j] && a[i][j]==a[i-1][j-1] && a[i][j]==a[i][j-1])
                lm[i][j]=max(lm[i][j],1+min(lm[i-1][j-1],min(lm[i-1][j],lm[i][j-1])));

        li=max(li,lm[i][j]);

    }
    }

    for(int it=li;it>=0;it--)
    {
        bool gasit=0;
        for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        if(lm[i][j]>=it && a[i][j]!='-' && a[i-it+1][j-it+1]!='-' && a[i-it+1][j]!='-' && a[i][j-it+1]!='-')
    {
        cout<<it<<' '<<i<<' '<<j<<'\n';
        for(ii=i-it+1;ii<=i;ii++)
            for(jj=j-it+1;jj<=j;jj++)
            a[ii][jj]='-';
            gasit=1;
    }
    if(gasit) it++;
    }


}

int main()
{
    read();
    //dynamic();
    dynamic_opt();
}*/

//Transport-GM

/*#include<bits/stdc++.h>
using namespace std;
vector <int> G[100002],D[100002];
queue <int>  q;
bool viz[100002];
int rasp=1e5,n,m;
void read()
{   int x,y,z;
    freopen("transport2.in","r",stdin);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&z);
        G[x].push_back(y);
        D[x].push_back(z);
        G[y].push_back(x);
        D[y].push_back(z);

    }
}

bool check(int pivot)
{
    int i,p;
    memset(viz,0,sizeof(viz));
    q.push(1);
    viz[1]=1;
    while(!q.empty())
    {
        p=q.front();
        for(i=0;i<G[p].size();i++)
            if(D[p][i]>=pivot && !viz[G[p][i]])
        {
            viz[G[p][i]]=1;
            q.push(G[p][i]);
        }
        q.pop();
    }
    return viz[n];

}

void caut_r(int li, int ls)
{
    int m;
    if(li<=ls)
{m=(li+ls)/2;
if (check(m))
    {
        rasp=m;
        caut_r(m+1,ls);
    }
    else
    {
        caut_r(li,m-1);
    }

}
}

int main()
{
    read();
    caut_r(1,10001);
    ofstream cout("transport2.out");
    cout<<rasp;
}*/

//taietura-oni 2017

#include<bits/stdc++.h>
#define N 6000000
using namespace std;
int v[N],sum[N],best[N],cmin,Sum,n,ii,j,viz[N];
void read()
{
    ifstream fin("ssm.in");
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
}
void dynamic()
{
    int i;
    sum[0]=0;
    for(i=1;i<=n;i++) sum[i]=sum[i-1]+v[i];
    cmin=sum[0];
    Sum=-N;
    for(i=1;i<=n;i++)
    {
        best[i]=sum[i]-cmin;
        if(cmin>sum[i]) {cmin=sum[i];
        ii=i;
        }
        if(best[i]>Sum)
            {Sum=best[i];
            j=i;
            }
    }

}

void dynamic_2()
{
    Sum=v[1];
    int i;
    for(i=1;i<=n;i++)
    {
        best[i]=v[i];
        if(best[i]<best[i-1]+v[i])
        {
            best[i]=best[i-1]+v[i];
        }
        else ii=i;
        if(best[i]>Sum)
            {Sum=best[i];
            j=i;
            }
    }
}

int main()
{
    read();
    dynamic_2();
    ofstream cout("ssm.out");
    cout<<Sum<<' '<<ii<<' '<<j;
}