Cod sursa(job #3168607)

Utilizator TeofilIacobTeo george TeofilIacob Data 12 noiembrie 2023 20:09:16
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.57 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
int n,sp[6000010];
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>sp[i];
    int best=-2000009,mn=0,idx=0,st=0,dr=0;
    for(int i=1;i<=n;i++)
    {
        sp[i]=sp[i-1]+sp[i];
        if(best<sp[i]-mn)
        {
            best=sp[i]-mn;
            st=idx+1;
            dr=i;
        }
        if(mn>sp[i])
            mn=sp[i],idx=i;
    }
    g<<best<<' '<<st<<' '<<dr<<'\n';
    return 0;
}



















//ifstream f("inversmodular.in");
//ofstream g("inversmodular.out");
//
//int64_t a,n,x,y;
//int64_t cmmdc(int64_t a,int64_t b,int64_t &x, int64_t &y)
//{
//    if(b==0)
//    {
//        x=1;
//        y=0;
//        return a;
//    }
//    int64_t D,X,Y;
//    cmmdc(b,a%b,X,Y);
//    x=Y;
//    y=X-a/b*Y;
//    return D;
//}
//int main()
//{
//    f>>a>>n;
//    cmmdc(a,n,x,y);
//    x%=n;
//    if(x<0)
//        x+=n;
//    g<<x<<'\n';
//    return 0;
//}



















//int aib[100010],q,n;
//void add(int poz,int val)
//{
//    while(poz<=n)
//    {
//        aib[poz]+=val;
//        poz+=poz&(-poz);
//    }
//}
//int sum(int poz)
//{
//    int64_t s=0;
//    while(poz)
//    {
//        s+=aib[poz];
//        poz-=poz&(-poz);
//    }
//    return s;
//}
//
//int main()
//{
//    f>>n>>q;
//    for(int i=1;i<=n;i++)
//    {
//        int x;
//        f>>x;
//        add(i,x); ///!!!!!!!!!
//    }
//
//    for(;q;q--)
//    {
//        int cer,a,b;
//        f>>cer;
//        if(cer==0)
//        {
//            f>>a>>b;
//            add(a,b);
//        }
//        if(cer==1)
//        {
//            f>>a>>b;
//            g<<sum(b)-sum(a-1)<<'\n';
//        }
//    }
//    return 0;
//}










































//int rmq[18][100010],q,n;
//int main()
//{
//    ///rmq[i][j] = minimul de pe secventa de lungime 2^i care incepe pe pozitia j
//    f>>n>>q;
//    for(int i=1;i<=n;i++)
//        f>>rmq[0][i];
//    for(int i=1,pas=1;pas<=n;i++,pas*=2)///linia curenta de pow 2^i si cat vede in dreapta
//        for(int j=1;j<=n-pas;j++)///de cate ori fac rmq pe o linie/fiecare poz
//            rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+pas]);
//    for(;q;q--)
//    {
//        int x,y,pow,exp;
//        f>>x>>y;
//        exp=31-__builtin_clz(y-x+1);
//        pow=1<<exp;
//        g<<min(rmq[exp][x],rmq[exp][y-pow+1])<<'\n';
//    }
//    return 0;
//}