Advertisement
Guest User

Untitled

a guest
Oct 20th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.01 KB | None | 0 0
  1. // Last index of the ladder, which the corresponding element composes.
  2. vector<int> up_ladders;
  3. // First index of the ladder, which the corresponding element composes.
  4. vector<int> down_ladders;
  5.  
  6. void FindAllLadders(const vector<int>& data) {
  7.     int N = data.size();
  8.  
  9.     // For up ladders proceed from right to left:
  10.     up_ladders.resize(N);
  11.     up_ladders[N - 1] = N - 1;
  12.  
  13.     for (int i = N - 1; i > 0; --i) {
  14.         if (data[i] >= data[i - 1]) up_ladders[i - 1] = up_ladders[i];
  15.         else up_ladders[i - 1] = i - 1;
  16.     }
  17.  
  18.     // For down ladders proceed from left to right:
  19.     down_ladders.resize(N);
  20.     down_ladders[0] = 0;
  21.  
  22.     for (int i = 1; i < N; ++i) {
  23.         if (data[i] <= data[i - 1]) down_ladders[i] = down_ladders[i - 1];
  24.         else down_ladders[i] = i;
  25.     }
  26. }
  27.  
  28. string Solve(int lo, int hi) {
  29.     if (up_ladders[lo] == up_ladders[hi] || // pure upwards ladder
  30.         down_ladders[lo] == down_ladders[hi] || // pure downwards ladder
  31.         up_ladders[lo] - down_ladders[hi] >= 0) // mix of up and down
  32.         return "Yes";
  33.     else return "No";
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement