Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <math.h>
  5.  
  6. using namespace std;
  7.  
  8. struct sqrt_dec {
  9. vector <int> elements;
  10. int min, max, sum;
  11. };
  12.  
  13. int n, k;
  14. vector <int> a;
  15. vector <sqrt_dec> arr;
  16.  
  17. void reading() {
  18. cin >> n;
  19. a.resize(n);
  20. for (int i = 0; i < n; i++)
  21. cin >> a[i];
  22. }
  23. void building() {
  24. int len = ceil(sqrt(n));
  25. arr.resize(len);
  26. int cnt = 0;
  27. for (int i = 0; i < n; i++) {
  28. if (i != 0 && i % len == 0)
  29. cnt++;
  30. arr[cnt].elements.push_back(a[i]);
  31. }
  32. for (int i = 0; i < arr.size(); i++) {
  33. arr[i].sum = 0;
  34. arr[i].max = 0;
  35. arr[i].min = 1000000000;
  36. for (int j = 0; j < arr[i].elements.size(); j++) {
  37. arr[i].sum += arr[i].elements[j];
  38. arr[i].max = max(arr[i].max, arr[i].elements[j]);
  39. arr[i].min = min(arr[i].min, arr[i].elements[j]);
  40. }
  41. }
  42. }
  43.  
  44. void writing() {
  45. for (int i = 0; i < arr.size(); i++) {
  46. cout << "sum = " << arr[i].sum << "; max = " << arr[i].max << "; elements: ";
  47. for (int j = 0; j < arr[i].elements.size(); j++)
  48. cout << arr[i].elements[j] << " ";
  49. cout << endl;
  50. }
  51. }
  52.  
  53. int max_query(int l, int r) {
  54. int request_answer = 0, cur_pos = 0, cnt = 0;
  55. while (cnt < arr.size() && cur_pos + arr[cnt].elements.size() <= l) {
  56. cur_pos += arr[cnt].elements.size();
  57. cnt++;
  58. }
  59. if (cur_pos + arr[cnt].elements.size() <= r) {
  60. for (int i = l - cur_pos; i < arr[cnt].elements.size(); i++)
  61. request_answer = max(request_answer, arr[cnt].elements[i]);
  62. cur_pos += arr[cnt].elements.size();
  63. cnt++;
  64. while (cnt < arr.size() && cur_pos + arr[cnt].elements.size() <= r) {
  65. request_answer = max(request_answer, arr[cnt].max);
  66. cur_pos += arr[cnt].elements.size();
  67. cnt++;
  68. }
  69. for (int i = 0; i <= r - cur_pos; i++)
  70. request_answer = max(request_answer, arr[cnt].elements[i]);
  71. return request_answer;
  72. }
  73. for (int i = l - cur_pos; i <= r - cur_pos; i++) {
  74. request_answer = max(request_answer, arr[cnt].elements[i]);
  75. }
  76. return request_answer;
  77. }
  78.  
  79. int sum_query(int l, int r) {
  80. int request_answer = 0, cur_pos = 0, cnt = 0;
  81. while (cnt <= arr.size() && cur_pos + arr[cnt].elements.size() <= l) {
  82. cur_pos += arr[cnt].elements.size();
  83. cnt++;
  84. }
  85. if (cur_pos + arr[cnt].elements.size() <= r) {
  86. for (int i = l - cur_pos; i < arr[cnt].elements.size(); i++)
  87. request_answer += arr[cnt].elements[i];
  88. cur_pos += arr[cnt].elements.size();
  89. cnt++;
  90. while (cnt < arr.size() && cur_pos + arr[cnt].elements.size() <= r) {
  91. request_answer += arr[cnt].sum;
  92. cur_pos += arr[cnt].elements.size();
  93. cnt++;
  94. }
  95. for (int i = 0; i <= r - cur_pos; i++)
  96. request_answer += arr[cnt].elements[i];
  97. return request_answer;
  98. }
  99. for (int i = l - cur_pos; i <= r - cur_pos; i++) {
  100. request_answer += arr[cnt].elements[i];
  101. }
  102. return request_answer;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement