Cod sursa(job #1964201)

Utilizator miruna999Morarasu Miruna miruna999 Data 13 aprilie 2017 11:09:35
Problema Subsecventa de suma maxima Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>
#define pas(x) ((x-1)^x)&x
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
int n,aib[12000000],a,maxi,inc,sf;

void update(int x,int val)
{
    for(int i=x;i<=n;i+=pas(i))
        aib[i]+=val;
}

int suma(int x)
{
    int sum=0;
    for(int i=x;i>0;i-=pas(i))
        sum+=aib[i];
    return sum;
}

int main()
{
    f>>n;
    for(int i=1;i<=n;++i)
    {
        f>>a;
        update(i,a);
        if(a>maxi)
            maxi=a,inc=i,sf=i;
    }
    for(int st=1;st<n;++st)
        for(int dr=st+1;dr<=n;++dr)
            if((suma(dr)-suma(st-1))>maxi)
                maxi=suma(dr)-suma(st-1),inc=st,sf=dr;
    g<<maxi<<" "<<inc<<" "<<sf;
    return 0;
}