Advertisement
skimono

Untitled

Oct 11th, 2023
878
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.73 KB | None | 0 0
  1. // clang-format off
  2. #pragma GCC optimize("Ofast")
  3. #pragma GCC optimize("no-stack-protector")
  4. #pragma GCC optimize("unroll-loops")
  5. #pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native")
  6. #pragma GCC optimize("fast-math")
  7. #define _CRT_SECURE_NO_WARNINGS
  8.  
  9. #include <iostream>
  10. #include <vector>
  11. #include <string>
  12. #include <algorithm>
  13. #include <cmath>
  14. #include <stack>
  15. #include <iomanip>
  16. #include <fstream>
  17. #include <string>
  18. #include <set>
  19. #include <deque>
  20. #include <queue>
  21. #include <map>
  22. #include <bitset>
  23. #include <random>
  24. #include <list>
  25. #include <unordered_map>
  26. #include <unordered_set>
  27. #include <cassert>
  28. using namespace std;
  29.  
  30. typedef long long ll;
  31. typedef short sh;
  32. typedef unsigned long long ull;
  33. typedef long double ld;
  34. typedef string str;
  35. //typedef __int128 ultraint;
  36. #define sqrt sqrtl
  37. #define F first
  38. #define S second
  39. #define endl '\n'
  40. #define all(vc666) vc666.begin(), vc666.end()
  41. #define allr(vc666) vc666.rbegin(), vc666.rend()
  42. //#define int long long
  43. #define degug(x) cerr (#x) << " " << (x) << endl;
  44.  
  45. const ll INF = 1e18 + 3;
  46. const ll inf = 2e9 + 3;
  47. const ll ONE = 1, ZERO = 0;
  48. const ll mod = 998244353;
  49. const ll m1 = 1e9 + 575179;
  50. const ll m2 = 1e9 + 87;
  51. const ll LG = 21;
  52. //const ll k = 106033;
  53. //const ll k_sqrt = 400;
  54. const ll p = 106033;
  55. ld EPS = 1e-9;
  56. ld PI = 3.1415926535897932384;
  57. ld phi = (sqrt(5) + 1.0) / 2.0;
  58. mt19937 rnd(4906);
  59.  
  60. const int N = 6e5 + 1;
  61. pair <int[30], ll[30]> tree[N];
  62. int a[N], bit;
  63. pair <int[30], ll[30]> elem;
  64. ll ans = 0;
  65.  
  66. void build(int v, int l, int r) {
  67.     if (l == r) {
  68.         for (bit = 29; bit >= 0; bit--) {
  69.             if (a[l] & (1 << bit)) {
  70.                 tree[v].first[bit] = min(tree[v].first[bit], a[l]);
  71.                 tree[v].second[bit] += a[l];
  72.                 break;
  73.             }
  74.         }
  75.     }
  76.     else {
  77.         int m = (l + r) / 2;
  78.         build(2 * v, l, m);
  79.         build(2 * v + 1, m + 1, r);
  80.         for (bit = 29; bit >= 0; bit--) {
  81.             tree[v].first[bit] = min(tree[2 * v].first[bit], tree[2 * v + 1].first[bit]);
  82.             tree[v].second[bit] = tree[2 * v].second[bit] + tree[2 * v + 1].second[bit];
  83.         }
  84.     }
  85. }
  86.  
  87. void query(int v, int l, int r, int ql, int qr) {
  88.     if (qr < l || ql > r) {
  89.         return;
  90.     }
  91.     else if (ql <= l && qr >= r) {
  92.         for (bit = 0; bit < 30; bit++) {
  93.             elem.first[bit] = min(elem.first[bit], tree[v].first[bit]);
  94.             elem.second[bit] += tree[v].second[bit];
  95.         }
  96.         return;
  97.     }
  98.     else {
  99.         int m = (l + r) / 2;
  100.         query(2 * v, l, m, ql, qr);
  101.         query(2 * v + 1, m + 1, r, ql, qr);
  102.         return;
  103.     }
  104. }
  105.  
  106. void solve() {
  107.     int n, m, i, l, r;
  108.     cin >> n >> m;
  109.     for (i = 0; i < n; i++) {
  110.         cin >> a[i];
  111.     }
  112.     for (i = 0; i < N; i++) {
  113.         for (bit = 0; bit < 30; bit++) {
  114.             tree[i].first[bit] = inf;
  115.             tree[i].second[bit] = 0;
  116.         }
  117.     }
  118.     build(1, 0, n - 1);
  119.     for (i = 0; i < m; i++) {
  120.         cin >> l >> r;
  121.         for (bit = 0; bit < 30; bit++) {
  122.             elem.first[bit] = inf;
  123.             elem.second[bit] = 0;
  124.         }
  125.         query(1, 0, n - 1, l - 1, r - 1);
  126.         ans = 0;
  127.         for (bit = 0; bit < 30; bit++) {
  128.             if (ans + ONE >= (ll)elem.first[bit]) {
  129.                 ans += elem.second[bit];
  130.             }
  131.         }
  132.         cout << ans + ONE << endl;
  133.     }
  134. }
  135.  
  136. signed main() {
  137. #ifdef _DEBUG
  138.     freopen("input.txt", "r ", stdin);
  139.     freopen("output.txt", "w", stdout);
  140. #endif
  141.     ios_base::sync_with_stdio(0);
  142.     cin.tie(NULL);
  143.     cout.tie(NULL);
  144.     int t = 1;
  145.     //cin >> t;
  146.     while (t--) solve();
  147. }
  148. //Deisgned by skimono
  149. //Клуб "Кольца(Серьги)"
  150.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement