fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const long long MaxN = 1e5 + 5, INF = 4e18;
  5.  
  6. long long n,q,a[MaxN];
  7.  
  8. struct Segment_Tree
  9. {
  10. vector<pair<long long,long long>> st;
  11.  
  12. pair<long long, long long> combine(pair<long long, long long> a, pair<long long, long long> b)
  13. {
  14. if(a.first>b.first) return a;
  15. if(a.first<b.first) return b;
  16. return {a.first, a.second+b.second};
  17. }
  18.  
  19. void build(long long id, long long l, long long r)
  20. {
  21. if(l==r)
  22. {
  23. st[id]={a[l],1};
  24. return;
  25. }
  26.  
  27. long long mid = (l+r)>>1;
  28.  
  29. build(2*id,l,mid);
  30. build(2*id+1,mid+1,r);
  31.  
  32. st[id]=combine(st[2*id],st[2*id+1]);
  33. }
  34.  
  35. pair<long long, long long> get(long long id, long long l, long long r, long long u, long long v)
  36. {
  37. if(l>v||r<u)
  38. {
  39. return {-INF,0};
  40. }
  41.  
  42. if(u<=l&&r<=v)
  43. {
  44. return st[id];
  45. }
  46.  
  47. long long mid = (l+r)>>1;
  48.  
  49. return combine(get(2*id,l,mid,u,v),get(2*id+1,mid+1,r,u,v));
  50. }
  51.  
  52. void update(long long id, long long l, long long r, long long u, long long val)
  53. {
  54. if(l>u||r<u)
  55. {
  56. return;
  57. }
  58.  
  59. if(l==r)
  60. {
  61. st[id]={val,1};
  62. return;
  63. }
  64.  
  65. long long mid = (l+r)>>1;
  66.  
  67. if(u<=mid)
  68. {
  69. update(2*id,l,mid,u,val);
  70. }
  71. else
  72. {
  73. update(2*id+1,mid+1,r,u,val);
  74. }
  75.  
  76. st[id]=combine(st[2*id],st[2*id+1]);
  77. }
  78.  
  79. pair<long long, long long> get(long long u, long long v)
  80. {
  81. return get(1,1,n,u,v);
  82. }
  83.  
  84. void update(long long u,long long val)
  85. {
  86. update(1,1,n,u,val);
  87. }
  88. };
  89.  
  90. int main()
  91. {
  92. ios_base::sync_with_stdio(0);
  93. cin.tie(0);
  94.  
  95. }
  96.  
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
Standard output is empty