Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. //ДЕРЕВО ОТРЕЗКОВ
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. struct SegmentTree{
  8. int get(int l, int r){
  9. return get(0, 0, n-1, l, r);
  10. }
  11. void set(int p, int x){
  12. set(0, 0, n-1, p, x);
  13. }
  14. int get(int id, int sl, int sr, int ql, int qr){
  15. if (ql<=sl && sr<=qr){
  16. return data[id];
  17. }
  18. int m=(sl+sr)/2;
  19. if (qr<=m){
  20. return get(id*2+1,sl,m,ql,qr);
  21. }
  22. if (ql>m){
  23. return get(id*2+2,m+1,sr,ql,qr);
  24. }
  25. return get(id*2+1,sl,m,ql,qr)+get(id*2+2,m+1,sr,ql,qr);
  26. }
  27. void set(int id, int sl, int sr, int p, int x){
  28. if (sl==sr){
  29. data[id]+=x;
  30. return ;
  31. }
  32. int m = (sl + sr) / 2;
  33. if (p <= m){
  34. set (id*2+1, sl, m , p, x);
  35. }
  36. else{
  37. set(id * 2 + 2, m+1, sr, p, x);
  38. }
  39. data[id] = data[id*2+1] + data[id*2+2];
  40. }
  41. int n;
  42. vector <int> data;
  43. SegmentTree(int n_){
  44. n=n_;
  45. data.resize(n*4);
  46. }
  47. int build(const vector<int> &a){
  48. build (0,0,n-1,a);
  49. }
  50. void build(int id, int sl, int sr, const vector<int> &a){
  51. if (sl==sr){
  52. data[id]=a[sl];
  53. return;
  54. }
  55. int m = (sl+sr)/2;
  56. build(id*2+1, sl, m, a);
  57. build(id*2+2, m+1, sr, a);
  58. data[id]=data[id*2+1]+data[id*2+2];
  59. }
  60. void add(int id, int sl, int sr, int ql, int qr, int x){
  61. if (ql<=sl&&sr<=qr){
  62. data[id]+=x;
  63. return;
  64. }
  65. int m = (sl+sr)/2;
  66. if( qr<= m) {
  67. add(id*2+1, sl, m, ql, qr, x);
  68. }
  69. if (m<qr){
  70. add(id*2+2, m+1, sr, ql, qr, x);
  71. }
  72. }
  73. int get(int id, int sl, int sr, int p){
  74. if (sl==sr){
  75. return data[id];
  76. }
  77. int m = (sl+sr)/2;
  78. if (p<=m){
  79. return get(id*2+1, sl, m, p)+data[id];
  80. }
  81. return get(id*2+2, m+1, sr, p)+data[id];
  82. }
  83. };
  84.  
  85. //ПОСТРОЕНИЕ ДЕРЕВА ЧЕРЕЗ SET РАБОТАЕТ ЗА O(NlogN), ЧЕРЕЗ build - ЗА O(N);
  86.  
  87. int main(){
  88.  
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement