Превышен лимит памяти, как это исправить? Конкурентное программирование на С ++ - PullRequest
0 голосов
/ 27 апреля 2020

извиняюсь за мой ужасный англ sh. Поэтому я просто написал код, который находит максимально возможную область заданной гистограммы. Но тестовый случай сообщил об ошибке «Превышен лимит памяти». Проблема говорит, что ограничение памяти составляет 64Mib. Но моя программа использует как минимум 148Mib. В любом случае, чтобы уменьшить его?

Вот эта проблема.

Вам нужно найти максимально возможную площадь прямоугольника данной гистограммы.

Ввод:

  1. n число >> ширина гистограммы. (1

  2. чисел, которые показывают высоту каждого столбца. (за каждым числом следует пробел)

Выход

Наибольшая возможная площадь прямоугольника на гистограмме.

Пример

вход

7 2 4 4 1 3 3 2

выход

8

Объясните

.. xx ........

.. хх .. хх ..

х хх .. ххх

х хх хххх

А вот и мой код:


using namespace std; 

int getMaxArea(int hist[], int n) { 

   stack<int> s; 
   int max_area = 0;
   int tp; 
   int area_with_top; 
   int i = 0; 
   while (i < n) { 
       if (s.empty() || hist[s.top()] <= hist[i]) 
           s.push(i++); 
       else{ 
           tp = s.top(); 
           s.pop();  
           area_with_top = hist[tp] * (s.empty() ? i : i - s.top() - 1); 
           if (max_area < area_with_top) 
               max_area = area_with_top; 
       } 
   } 
   while (s.empty() == false) { 
       tp = s.top(); 
       s.pop(); 
       area_with_top = hist[tp] * (s.empty() ? i : i - s.top() - 1); 
       if (max_area < area_with_top) 
           max_area = area_with_top; 
   } 
   return max_area; 
} 

int main() { 
   int hist[100],n; 
   cin >> n;
   for(int i=0;i<n;i++)
   cin >> hist[i];
   cout << getMaxArea(hist, n); 
   return 0; 
} 
...