Advertisement
ThegeekKnight16

Global Warming - Metade

Aug 21st, 2023
808
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = 5e5 + 10;
  4. const int MAXK = 25;
  5. array<array<int, MAXK>, MAXN> dp;
  6. array<int, MAXN> prevMin, nextMin, prevMax, nextMax;
  7. map<int, int> lastOccur;
  8.  
  9. int main()
  10. {
  11.     ios_base::sync_with_stdio(false);
  12.     cin.tie(NULL);
  13.     int N; cin >> N;
  14.  
  15.     vector<int> v(N+2);
  16.     for (int i = 1; i <= N; i++)
  17.         cin >> v[i];
  18.  
  19.     for (int i = 1; i < N; i++)
  20.         dp[i][0] = min(v[i], v[i+1]);
  21.  
  22.     for (int k = 1; k < MAXK; k++)
  23.         for (int i = 1; i <= N; i++)
  24.             dp[i][k] = min(dp[i][k-1], dp[i + (1 << (k-1))][k-1]);
  25.  
  26.     stack<int> Max, Min;
  27.     for (int i = 1; i <= N; i++)
  28.     {
  29.         while (!Max.empty() && v[Max.top()] < v[i]) Max.pop();
  30.         while (!Min.empty() && v[Min.top()] > v[i]) Min.pop();
  31.         prevMin[i] = (Min.empty() ? 0 : Min.top()); prevMax[i] = (Max.empty() ? 0 : Max.top());
  32.         Min.push(i); Max.push(i);
  33.     }
  34.  
  35.     while (!Max.empty()) Max.pop();
  36.     while (!Min.empty()) Min.pop();
  37.  
  38.     for (int i = N; i >= 1; i--)
  39.     {
  40.         while (!Max.empty() && v[Max.top()] < v[i]) Max.pop();
  41.         while (!Min.empty() && v[Min.top()] > v[i]) Min.pop();
  42.         nextMin[i] = (Min.empty() ? N+1 : Min.top()); nextMax[i] = (Max.empty() ? N+1 : Max.top());
  43.         Min.push(i); Max.push(i);
  44.     }
  45.  
  46.     int resp = 2;
  47.     for (int i = 1; i <= N; i++)
  48.     {
  49.         int l = prevMax[i]+1, r = nextMax[i]-1;
  50.  
  51.     }
  52. }
  53.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement