Cod sursa(job #3316800)

Utilizator magnifica5Tabarca Ioana magnifica5 Data 20 octombrie 2025 23:01:42
Problema Subsecventa de suma maxima Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int sum[6000001], mins[6000001];
vector<long long>poz(6000001, -2147483649);
int main()
{
   int n, x, maxi = INT_MIN, fst, sec;
   cin >> n;
   for(int i = 1; i <= n; i ++){
       cin >> x;
       sum[i] = sum[i - 1] + x;
   }
   int cnt = 1;
   mins[1] = 1;
   for(int i = 2; i <= n; i ++){
       if(sum[i] < sum[mins[cnt]]){
          mins[++ cnt] = i;
       }
   }
   for(int i = 1; i <= n; i ++){
       poz[mins[i]] = mins[i];
   }
   long long last = 0;
   for(int i = 1; i <= n; i ++){
       if(poz[i] != -2147483649){
          swap(poz[i], last);
       }
       else
        poz[i] = last;
   }
   for(int i = 1; i <= n; i ++){
       if(maxi < sum[i] - sum[poz[i]]){
          maxi = sum[i] - sum[poz[i]];
          fst = poz[i] + 1;
          sec = i;
       }
   }
   cout << maxi << ' ' << fst << ' ' << sec;
}