Advertisement
lalalalalalalaalalla

Untitled

Nov 25th, 2019
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <iomanip>
  5. #include <queue>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <unordered_map>
  9. #include <tuple>
  10. #include <iomanip>
  11. #include <stdio.h>
  12. #include <map>
  13. #include <bitset>
  14. #include <set>
  15. #include <stack>
  16. #include <queue>
  17. #include <unordered_set>
  18. #include <cassert>
  19. #include <stdlib.h>
  20. #include <time.h>
  21. #include <random>
  22.  
  23.  
  24. //#pragma GCC optimize("Ofast,no-stack-protector")
  25. //#pragma GCC target("sse,sse2,sse3,sse3,sse4");
  26. //#pragma GCC optimize("unroll-loops")
  27. //#pragma GCC optimize("fast-math")
  28. //#pragma GCC target("avx2")
  29. //#pragma GCC optimize("section-anchors")
  30. //#pragma GCC optimize("profile-values,profile-reorder-functions,tracer")
  31. //#pragma GCC optimize("vpt")
  32. //#pragma GCC optimize("rename-registers")
  33. //#pragma GCC optimize("move-loop-invariants")
  34. //#pragma GCC optimize("unswitch-loops")
  35. //#pragma GCC optimize("function-sections")
  36. //#pragma GCC optimize("data-sections")
  37.  
  38. //#define int long long
  39. #define ll long long
  40. #define ull unsigned long long
  41. #define all(a) (a).begin(), (a).end()
  42. #define pii pair<int, int>
  43. #define pb push_back
  44. #define ld long double
  45.  
  46.  
  47. using namespace std;
  48.  
  49. //const int INF = 1e17;
  50. //const int mod = 2600000069;
  51. //const int p = 179;
  52.  
  53. vector<int> p, h, m, r;
  54. const ll mod = 1e6 + 3;
  55. ll zerg = 0, n, q;
  56.  
  57. int par(int v) {
  58. if (p[v] == v) return v;
  59. return p[v] = par(p[v]);
  60. }
  61.  
  62. void join(int u, int v) {
  63. u = par(u);
  64. v = par(v);
  65. if (u != v) {
  66. if (h[u] > h[v]) swap(u, v);
  67. for (int i = 0; i < n; i++) {
  68. if (par(i) == u) r[i] += m[v];
  69. else if (par(i) == v) r[i] += m[u];
  70. }
  71. p[u] = v;
  72. m[v] += m[u];
  73. if (h[u] == h[v]) h[v]++;
  74. }
  75. }
  76.  
  77. signed main() {
  78. ios_base::sync_with_stdio(0);
  79. cin.tie(0);
  80. cout.tie(0);
  81. cin >> n >> q;
  82. p.resize(n);
  83. for (int i = 0; i < n; i++) p[i] = i;
  84. h.assign(n, 0);
  85. m.assign(n, 0);
  86. r.assign(n, 0);
  87. int t, u, v;
  88. while (q--) {
  89. cin >> t;
  90. if (t == 1) {
  91. cin >> u;
  92. u = (u + zerg) % n;
  93. m[par(u)]++;
  94. zerg = (30 * zerg + 239) % mod;
  95. } else if (t == 2) {
  96. cin >> u >> v;
  97. u = (u + zerg) % n;
  98. v = (v + zerg) % n;
  99. if (par(u) != par(v)) {
  100. join(u, v);
  101. zerg = (13 * zerg + 11) % mod;
  102. }
  103. } else {
  104. cin >> u;
  105. u = (u + zerg) % n;
  106. int w = m[par(u)] - r[u];
  107. r[u] += w;
  108. cout << w << "\n";
  109. zerg = (100500LL * zerg + w) % mod;
  110. }
  111. }
  112. }
  113. /*
  114. 4 10
  115. 1 0
  116. 1 2
  117. 1 1
  118. 1 2
  119. 3 1
  120. 2 1 2
  121. 1 3
  122. 3 3
  123. 2 3 2
  124. 3 2
  125. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement