Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. #pragma GCC optimize("O3", "unroll-loops")
  2. #pragma GCC target("avx2")
  3.  
  4. #include <iostream>
  5. #include <iomanip>
  6. #include <vector>
  7. #include <algorithm>
  8. #include <cmath>
  9. #include <string>
  10. #include <map>
  11. #include <unordered_map>
  12. #include <set>
  13. #include <unordered_set>
  14. #include <bitset>
  15. #include <sstream>
  16. #include <deque>
  17. #include <queue>
  18. #include <random>
  19. #include <cassert>
  20.  
  21. using namespace std;
  22.  
  23. #define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  24. #define FIXED cout << fixed << setprecision(12)
  25. #define RANDOM srand(94385)
  26. #define ll long long
  27. #define ld long double
  28. #define pii pair<int, int>
  29. #define pll pair<ll, ll>
  30. #define graph vector<vector<int>>
  31. #define pb push_back
  32. #define pf push_front
  33. #define popb pop_back
  34. #define popf pop_front
  35. #define f first
  36. #define s second
  37. #define hashmap unordered_map
  38. #define hashset unordered_set
  39. #define eps 1e-9
  40. #define mod 1000000007
  41. #define inf 3000000000000000007ll
  42. #define sz(a) signed(a.size())
  43. #define all(a) a.begin(), a.end()
  44. #define rall(a) a.rbegin(), a.rend()
  45.  
  46. template<class T, class U> inline void checkmin(T &x, U y) { if (y < x) x = y; }
  47. template<class T, class U> inline void checkmax(T &x, U y) { if (y > x) x = y; }
  48. template<class T, class U> inline bool ifmax(T &x, U y) { if (y > x) return x = y, true; return false; }
  49. template<class T, class U> inline bool ifmin(T &x, U y) { if (y < x) return x = y, true; return false; }
  50. template<class T> inline void sort(T &a) { sort(all(a)); }
  51. template<class T> inline void rsort(T &a) { sort(rall(a)); }
  52. template<class T> inline void reverse(T &a) { reverse(all(a)); }
  53. template<class T, class U> inline istream& operator>>(istream& str, pair<T, U> &p) { return str >> p.f >> p.s; }
  54. template<class T> inline istream& operator>>(istream& str, vector<T> &a) { for (auto &i : a) str >> i; return str; }
  55. template<class T> inline T sorted(T a) { sort(a); return a; }
  56.  
  57.  
  58. template<class T>
  59. struct sparse {
  60.     static const int LOG = 18;
  61.     static const int N = 2e5 + 10;
  62.     int mx2[N];
  63.     T v[LOG][N];
  64.     sparse(vector<T> a, T (*cmp)(T, T)) {
  65.         for (int i = 2; i < N; ++i) mx2[i] = mx2[i >> 1] + 1;
  66.         int n = sz(a);
  67.         for (int i = 0; i < n; ++i) v[0][i] = a[i];
  68.         for (int l = 1; l < LOG; ++l)
  69.             for (int i = 0; i + (1 << l) <= n; ++i)
  70.                 v[l][i] = cmp(v[l - 1][i], v[l - 1][i + (1 << l - 1)]);
  71.     }
  72.     T get(int l, int r) {
  73.         int mx = mx2[r - l + 1];
  74.         return cmp(v[mx][l], v[mx][r - (1 << mx) + 1]);
  75.     }
  76. };
  77.  
  78. signed main() {
  79.     FAST; FIXED; RANDOM;
  80.     vector<int> a = {1, 2, 3, 4, 5};
  81.     sparse<int> sp(a, min);
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement