Advertisement
MegaVerkruzo

Задача C informatics

Sep 11th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. const long long INF = 1e9;
  7.  
  8. void build(vector<long long>& a, vector<long long>& z, int l, int r, int now) {
  9. if (l > r) {
  10. return;
  11. }
  12. if (l == r) {
  13. z[now] = a[l];
  14. return;
  15. }
  16. int mid = (l + r) / 2;
  17. build(a, z, l, mid, now * 2);
  18. build(a, z, mid + 1, r, now * 2 + 1);
  19. if (z[now * 2] == z[now * 2 + 1] && z[now * 2] != -1 && z[now * 2 + 1] != -1) {
  20. z[now] = z[now * 2];
  21. }
  22. else {
  23. z[now] = -1;
  24. }
  25. }
  26.  
  27. void update(vector<long long>& z, int l, int r, int a, int b, int now, int value) {
  28. if (l > r || a > r || b < l) {
  29. return;
  30. }
  31. if (l == r) {
  32. z[now] = value;
  33. return;
  34. }
  35. int mid = (l + r) / 2;
  36. update(z, l, mid, a, b, now * 2, value);
  37. update(z, mid + 1, r, a, b, now * 2 + 1, value);
  38. if (z[now * 2] == z[now * 2 + 1] && z[now * 2] != -1 && z[now * 2 + 1] != -1) {
  39. z[now] = z[now * 2];
  40. }
  41. }
  42.  
  43. int query(vector<long long>& z, int l, int r, int ind, int now) {
  44. if (l > r || !(l <= ind && ind <= r)) {
  45. return -INF;
  46. }
  47. if (z[now] != -1) {
  48. return z[now];
  49. }
  50. else {
  51. int mid = (l + r) / 2;
  52. if (l <= ind && ind <= mid) {
  53. return query(z, l, mid, ind, now * 2);
  54. }
  55. else {
  56. return query(z, mid + 1, r, ind, now * 2 + 1);
  57. }
  58. }
  59. }
  60.  
  61. int main()
  62. {
  63. int n;
  64. cin >> n;
  65. vector<long long> a(n);
  66. for (int i = 0; i < n; ++i) {
  67. cin >> a[i];
  68. }
  69. vector<long long> z(n * 2, 0);
  70. build(a, z, 0, n - 1, 1);
  71. int m;
  72. cin >> m;
  73. for (int i = 0; i < m; ++i) {
  74. char c;
  75. cin >> c;
  76. if (c == 'g') {
  77. int ind;
  78. cin >> ind;
  79. ind--;
  80. cout << query(z, 0, n - 1, ind, 1) << " ";
  81. }
  82. else if (c == 'a') {
  83. int l, r, value;
  84. cin >> l >> r >> value;
  85. l--;
  86. r--;
  87. update(z, 0, n - 1, l, r, 1, value);
  88. }
  89. }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement