I have tried every single case that has come to my mind and I don´t see what's wrong.
Could someone tell what's wrong with my code? I think it might be the output
#include<iostream>
#include<cstring>
using namespace std;
int edificios;
long long res[100001];
long long problem[100001];
void solucionar(long long beg, long long end, long long lev)
{
long long mini = 100000;
for (long long i = beg; i < end; i++)
{
if (problem[i] - lev < mini) mini = problem[i] - lev;
}
if (end - beg == 1)
{
res[beg] += mini;
return;
}
long long indis = beg;
bool llamado = true;
for (long long i = beg; i < end; i++)
{
res[i] += (end - beg - (i - beg) ) * ((i - beg) + 1) * mini;
if(llamado && (problem[i] - lev - mini) > 0)
{
indis = i;
llamado = false;
}
if (!llamado && (problem[i+1] - lev - mini) <= 0)
{
solucionar(indis, i+1, lev+mini);
llamado = true;
}
}
}
int main()
{
cin >> edificios;
for (int i = 0; i < edificios; i++)
{
cin >> problem[i];
}
problem[edificios] = 0;
memset(res, 0, sizeof(res));
solucionar(0, edificios, 0);
for (int i = 0; i < edificios; i++)
{
if (i > 0)
cout << " ";
cout << res[i];
}
return 0;
}