Cod sursa(job #1965592)

Utilizator mariaBmaria blaj mariaB Data 14 aprilie 2017 14:52:49
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 kb
#include <iostream>
#include <cstdio>
#include <cctype>
#include <fstream>
using namespace std;
int cursor;
const int SZ=1000;
char s[SZ];
FILE*f;
void init(){
  f=fopen("ssm.in","r");
  cursor=0;
  fread(s,1,SZ,f);
}
void advance_cursor(){
   cursor++;
   if(cursor==SZ){
    cursor=0;
    fread(s,1,SZ,f);
   }
}
int read_next_int(){
    bool ok=false;
    while(!isdigit(s[cursor])){
        if(s[cursor]=='-')
           ok=true;
        advance_cursor();
    }
    int x=0;
    while(isdigit(s[cursor])){
        x=x*10+s[cursor]-'0';
        advance_cursor();
    }
    if(ok==true)
        return -x;
    else
        return x;
}
int sum[6000000];
int sum2[6000000];
bool sum3[6000000];
int main()
{
    init();
    ofstream cout("ssm.out");
    int n=read_next_int();
    int x,max=-99999999,a=0,b=0,poza;
    long long min=999999999999999;
    for(int i=1;i<=n;i++){
        x=read_next_int();
        sum[i]=sum[i-1]+x;
        if(sum[i]<min){
            min=sum[i];
            sum2[i]=min;
            sum3[i]=1;
            poza=i;
        }
        else{
        sum2[i]=poza;
        sum3[i]=0;
        }
    }
    for(int i=1;i<=n;i++){
        if(sum3[i-1]==1){
            if(sum[i]-sum2[i-1]>max){
                max=sum[i]-sum2[i-1];
                a=i-1;
                b=i;
            }
        }
        else{
            if(sum[i]-sum2[sum2[i-1]]>max)
            {
                max=sum[i]-sum2[sum2[i-1]];
                a=sum2[i-1];
                b=i;
            }
        }
    }
    cout<<max<<" "<<a+1<<" "<<b;
    return 0;
}