Advertisement
GerONSo

Untitled

Jun 7th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. #define pragma
  2.  
  3. #ifdef pragma
  4. #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops")
  5. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  6. #endif // pragma
  7.  
  8. #include<bits/stdc++.h>
  9. #include <ext/pb_ds/assoc_container.hpp>
  10. #include <ext/pb_ds/tree_policy.hpp>
  11.  
  12. #define ll long long
  13. #define all(x) begin(x), end(x)
  14. #define pb push_back
  15. #define x first
  16. #define y second
  17. #define int long long
  18. #define zero(two) memset(two, 0, sizeof(two))
  19.  
  20. using namespace std;
  21. using namespace __gnu_pbds;
  22.  
  23.  
  24. typedef vector<int> vi;
  25. typedef vector<bool> vb;
  26. typedef pair<int, int> pii;
  27. typedef long double ld;
  28. typedef vector<vi> matrix;
  29. template<typename T>
  30. using kawaii_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  31.  
  32. const ld PI = atan2(0, -1);
  33.  
  34. void seriy() {
  35. ios::sync_with_stdio(0);
  36. cin.tie(0);
  37. cout.tie(0);
  38. cout << fixed << setprecision(10);
  39. #if _offline
  40. freopen("input.txt", "r", stdin);
  41. freopen("output.txt", "w", stdout);
  42. #endif
  43. }
  44.  
  45. const int MAXN = 3e5 + 10;
  46. const int INF = 1e18 + 7;
  47. const int MAXLOG = 20;
  48. const int MOD = 998244353;
  49. const int BASE = 47;
  50. const int MAX = (1ll << 32) - 1;
  51.  
  52. struct node {
  53. vi nxt(10), sum(10);
  54. };
  55.  
  56. void push(int v, int tl, int tr) {
  57. for(int i = 0; i < 10; i++) {
  58. t[v * 2 + 1].nxt[i] = t[v].nxt[t[v * 2 + 1].nxt[i]];
  59. t[v * 2 + 2].nxt[i] = t[v].nxt[t[v * 2 + 2].nxt[i]];
  60. }
  61. for(int i = 0; i < 10; i++) {
  62. t[v].sum[i] = t[v]
  63. }
  64. }
  65.  
  66. int get(int v, int tl, int tr, int l, int r) {
  67. if(tl > r || tr < l) {
  68. return 0;
  69. }
  70. if(tl >= l && tr <= r) {
  71. int sm = 0;
  72. for(int i = 0; i < 10; i++) {
  73. sm += t[v].sum[i] * i;
  74. }
  75. return sm;
  76. }
  77. int tm = (tl + tr) >> 1;
  78. int left = get(v * 2 + 1, tl, tm, l, r);
  79. int right = get(v * 2 + 2, tm + 1, tr, l, r);
  80. return left + right;
  81. }
  82.  
  83. void update(int v, int tl, int tr, int l, int r, int x, int y) {
  84. push(v, tl, tr);
  85. if(tl > r && tr < l) {
  86. return;
  87. }
  88. if(tl >= l && tr <= r) {
  89. t[v].nxt[x] = y;
  90. push(v, tl, tr);
  91. return;
  92. }
  93. int tm = (tl + tr) >> 1;
  94. update(v * 2 + 1, tl, tm, l, r, x, y);
  95. update(v * 2 + 2, tm + 1, tr, l ,r ,x, y);
  96. for(int i = 0; i < 10; i++) {
  97. t[v].sum[i] = t[v * 2 + 1].sum[i] + t[v * 2 + 2].sum[i];
  98. }
  99. }
  100.  
  101. signed main() {
  102. seriy();
  103. int n, q;
  104. cin >> n >> q;
  105. vi a(n);
  106. for(int i = 0; i < n; i++) {
  107. cin >> a[i];
  108. }
  109. while(q--) {
  110. int tp;
  111. cin >> tp;
  112. if(tp == 1) {
  113. int l, r, x, y;
  114. cin >> l >> r >> x >> y;
  115. l--;
  116. r--;
  117.  
  118. }
  119. else {
  120. int l, r;
  121. cin >> l >> r;
  122. }
  123. }
  124. return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement