Guest User

c.cpp

a guest
Jan 21st, 2026
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <vector>
  7. #include <set>
  8. #include <map>
  9. #include <unordered_set>
  10. #include <unordered_map>
  11. #include <queue>
  12. #include <ctime>
  13. #include <cassert>
  14. #include <complex>
  15. #include <string>
  16. #include <cstring>
  17. #include <chrono>
  18. #include <random>
  19. #include <bitset>
  20. #include <array>
  21. using namespace std;
  22.  
  23. #ifdef LOCAL
  24.     #define eprintf(...) {fprintf(stderr, __VA_ARGS__);fflush(stderr);}
  25. #else
  26.     #define eprintf(...) 42
  27. #endif
  28.  
  29. using ll = long long;
  30. using ld = long double;
  31. using uint = unsigned int;
  32. using ull = unsigned long long;
  33. template<typename T>
  34. using pair2 = pair<T, T>;
  35. using pii = pair<int, int>;
  36. using pli = pair<ll, int>;
  37. using pll = pair<ll, ll>;
  38. mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
  39. ll myRand(ll B) {
  40.     return (ull)rng() % B;
  41. }
  42.  
  43. #define pb push_back
  44. #define mp make_pair
  45. #define all(x) (x).begin(),(x).end()
  46. #define fi first
  47. #define se second
  48.  
  49. clock_t startTime;
  50. double getCurrentTime() {
  51.     return (double)(clock() - startTime) / CLOCKS_PER_SEC;
  52. }
  53.  
  54.  
  55. const int N = 500500;
  56. const int LOG = 20;
  57. int cnt[N + 1];
  58. int a[LOG][N];
  59.  
  60. inline int solve(int l, int r) {
  61.     int len = r - l;
  62.     int res = 0;
  63.     for (int k = LOG - 1; k >= 0; k--) if ((len >> k) & 1) {
  64.         res ^= a[k][l];
  65.         l += 1 << k;
  66.         res ^= (cnt[l] ^ cnt[r]) << k;
  67.     }
  68.     return res;
  69. }
  70.  
  71. int main()
  72. {
  73.     startTime = clock();
  74. //  freopen("input.txt", "r", stdin);
  75. //  freopen("output.txt", "w", stdout);
  76.  
  77.     int n, m, x;
  78.     scanf("%d%d", &n, &m);
  79.     while(n--) {
  80.         scanf("%d", &x);
  81.         cnt[x + 1] ^= 1;
  82.     }
  83.     for (int i = 1; i <= N; i++)
  84.         cnt[i] ^= cnt[i - 1];
  85.     for (int k = 0; k < LOG - 1; k++)
  86.         for (int i = 0; i < N; i++) {
  87.             a[k + 1][i] = a[k][i];
  88.             x = i + (1 << k);
  89.             if (x >= N) continue;
  90.             a[k + 1][i] ^= a[k][x];
  91.             a[k + 1][i] ^= (cnt[x] ^ cnt[min(x + (1 << k), N)]) << k;
  92.         }
  93.     for (int k = 1; k <= m; k++) {
  94.         int ans = 0;
  95.         int l = 0;
  96.         while(l < N) {
  97.             ans ^= solve(l, min(N, l + k));
  98.             l += k;
  99.         }
  100.         printf("%d ", ans);
  101.     }
  102.     printf("\n");
  103.  
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment