Guest User

Untitled

a guest
Nov 20th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <random>
  3.  
  4. using namespace std;
  5.  
  6. unsigned long long N, M, x, y, sum, k;
  7.  
  8. char c;
  9.  
  10. unsigned long long pra[200000 + 100] = {0}, m[200000 * 4 + 200][2] = {0};
  11.  
  12. void build(long int pr, long int pb, long int i)
  13. {
  14. if(pr == pb)
  15. {
  16. m[i][0] = pra[pr-1];
  17. }
  18. else
  19. {
  20. long int index = (pr + pb) / 2;
  21. build(pr, index, i * 2);
  22. build(index + 1, pb, i * 2 + 1);
  23. m[i][0] = m[i * 2][0] + m[i * 2 + 1][0];
  24. }
  25. }
  26.  
  27. void suma(long int pr, long int pb, long int l, long int r, long int i)
  28. {
  29. if(m[i][1] != 0)
  30. {
  31. m[i][0] = m[i][1] * (pb - pr + 1);
  32. if(pr != pb)
  33. {
  34. m[i*2][1] = m[i][1];
  35. m[i*2+1][1] = m[i][1];
  36. }
  37. m[i][1] = 0;
  38. }
  39. if(pr >= l && pb <= r)
  40. {
  41. sum += m[i][0];
  42. }
  43. else if(pr != pb)
  44. {
  45. long int index = (pr + pb) / 2;
  46. if(pb >= l)
  47. suma(pr, index, l, r, i * 2);
  48. if(pr <= r)
  49. suma(index + 1, pb, l, r, i * 2 + 1);
  50. }
  51. }
  52.  
  53. void add(long int pr, long int pb, long int l, long int r, long int kiek, long int i)
  54. {
  55. if(m[i][1] != 0)
  56. {
  57. m[i][0] = m[i][1] * (pb - pr + 1);
  58. if(pr != pb)
  59. {
  60. m[i*2][1] = m[i][1];
  61. m[i*2+1][1] = m[i][1];
  62. }
  63. m[i][1] = 0;
  64. }
  65. if(pr >= l && pb <= r)
  66. {
  67. m[i][1] = kiek;
  68. }
  69. else if(pr != pb)
  70. {
  71. long int index = (pr + pb) / 2;
  72. if(pb >= l)
  73. add(pr, index, l, r, kiek, i * 2);
  74. if(pr <= r)
  75. add(index + 1, pb, l, r, kiek, i * 2 + 1);
  76. }
  77. }
  78.  
  79. unsigned long long arr[200010];
  80.  
  81. void build2() {
  82. for (int i = 1; i <= N; i++) {
  83. arr[i] = pra[i - 1];
  84. }
  85. }
  86.  
  87. void add2(int pr, int pb, long int kiek) {
  88. for (int i = pr; i <= pb; i++) {
  89. arr[i] = kiek;
  90. }
  91. }
  92.  
  93. unsigned long long suma2(int pr, int pb) {
  94. unsigned long long s = 0;
  95. for (int i = pr; i <= pb; i++) {
  96. s += arr[i];
  97. }
  98. return s;
  99. }
  100.  
  101. int main()
  102. {
  103. ios::sync_with_stdio(false);
  104. cin.tie(0);
  105. srand(0);
  106. //cin >> N >> M;
  107. N = 2; M = 100000;
  108. cout << N << " " << M << endl;
  109. for(int a = 0; a < N; a++)
  110. {
  111. //cin >> pra[a];
  112. pra[a] = rand() % 10 + 1;
  113. cout << pra[a] << " ";
  114. }
  115. cout << endl;
  116. build(1, N, 1);
  117. build2();
  118. for(int a = 0; a < M; a++)
  119. {
  120. //cin >> c >> x >> y;
  121. c = "?!"[rand() % 2];
  122. x = rand() % N + 1;
  123. y = rand() % N + 1;
  124. if (x > y) swap(x, y);
  125. if(c == '?')
  126. {
  127. cout << "? " << x << " " << y << endl;
  128. sum = 0;
  129. suma(1, N, x, y, 1);
  130. unsigned long long expected = suma2(x, y);
  131. if (expected != sum) {
  132. cout << "expected: " << expected << endl;
  133. cout << "got: " << sum << endl;
  134. return 1;
  135. }
  136. // cout << sum << '\n';
  137. }
  138. else
  139. {
  140. k = rand() % 10 + 1;
  141. cout << "! " << x << " " << y << " " << k << endl;
  142. //cin >> k;
  143. add(1, N, x, y, k, 1);
  144. add2(x, y, k);
  145. }
  146. }
  147. cout << "All OK" << endl;
  148. return 0;
  149. }
Add Comment
Please, Sign In to add comment