The5threic1-1

LC-chiika

Aug 31st, 2024
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | Source Code | 0 0
  1. class Solution {
  2. public:
  3.     int largestRectangleArea(vector<int>& heights) {
  4.         int n = heights.size();
  5.         vector<int> hgt[10005];
  6.         for(int i=0; i<n; i++)
  7.         {
  8.             hgt[heights[i]].push_back(i);
  9.         }
  10.         set<pair<int, int>> inter;
  11.         multiset<int> res;
  12.         inter.insert(make_pair(0, n-1)); res.insert(n);
  13.         long long ans = 0;
  14.         for(int i=1; i<10004; i++)
  15.         {
  16.             for(auto stuff : hgt[i-1])
  17.             {
  18.                 int ind = stuff;
  19.                 pair<int, int> fav = *prev(inter.upper_bound(make_pair(stuff, 1e9)));
  20.                 pair<int, int> broken_1 = make_pair(fav.first, stuff-1);
  21.                 pair<int, int> broken_2 = make_pair(stuff+1, fav.second);
  22.                 res.erase(res.find(fav.second-fav.first+1));
  23.                 inter.erase(fav);
  24.                 if(broken_1.first<=broken_1.second)
  25.                 {
  26.                     inter.insert(broken_1);
  27.                     res.insert(broken_1.second-broken_1.first+1);
  28.                 }
  29.                 if(broken_2.first<=broken_2.second)
  30.                 {
  31.                     inter.insert(broken_2);
  32.                     res.insert(broken_2.second-broken_2.first+1);
  33.                 }
  34.             }
  35.             if(inter.empty())
  36.             {
  37.                 break;
  38.             }
  39.             ans = max(ans, 1ll*i*(*prev(res.end())));
  40.         }
  41.         return ans;
  42.     }
  43. };
Advertisement
Add Comment
Please, Sign In to add comment