Advertisement
Mr_Olympia

спарсы

May 27th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1.  
  2. typedef long long integer; // change
  3.  
  4. const int LG = 20, NN = 300007; // change
  5.  
  6. integer op(integer a, integer b) // change
  7. {
  8.     return max(a, b);
  9. }
  10. int logs[NN];
  11. integer bin[LG][NN];
  12. vector<integer> sparce_table;
  13. integer find(int l, int r)  // [l;r)
  14. {
  15.     int x = logs[r - l];
  16.     return op(bin[x][l], bin[x][r - (1 << x)]);
  17. }
  18.  
  19. void buildBin(vector<ll> b)
  20. {
  21.     sparce_table = b;
  22.     int n = sparce_table.size();
  23.     int cur = 0, x = 1;
  24.     for (int i = 0; i < n + 2; i++)
  25.     {
  26.         if (2 * x == i)
  27.         {
  28.             x *= 2;
  29.             cur++;
  30.         }
  31.         logs[i] = cur;
  32.     }
  33.     for (int i = 0; i < n; i++)
  34.         bin[0][i] = sparce_table[i];
  35.     for (int i = 0; i + 1 < LG; i++)
  36.         for (int j = 0; j < n; j++)
  37.             bin[i + 1][j] = op(bin[i][j], bin[i][min(j + (1 << i), n - 1)]);
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement