Advertisement
hemel18681

segment tree 01

Jul 16th, 2019
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5. const int sz=100005;
  6.  
  7. double ar[3*sz];
  8. double tree[3*sz];
  9.  
  10. void ini(int node,int b, int e)
  11. {
  12.     if(b==e) {tree[node]=ar[b]; return ;}
  13.     int left=node*2;
  14.     int right = node*2 +1;
  15.     int mid=(b+e)/2;
  16.     ini(left,b,mid);
  17.     ini(right,mid+1,e);
  18.     tree[node]=tree[left]+tree[right];
  19. }
  20. double query(int node, int b, int e, int i, int j)
  21. {
  22.     if(i>e||j<b) return 0;
  23.     if(b>=i&&e<=j) return tree[node];
  24.     int left= node*2;
  25.     int right = node*2 +1;
  26.     int mid= (b+e)/2;
  27.     double p1= query(left,b,mid,i,j);
  28.     double p2= query(right,mid+1,e,i,j);
  29.     return p1+p2;
  30. }
  31. void update(int node,int b,int e,int i,double newvalue)
  32. {
  33.     if(i>e||i<b) return;
  34.     if(b>=i&&e<=i)
  35.     {
  36.         tree[node]= newvalue;
  37.         return ;
  38.     }
  39.     int left=node*2;
  40.     int right = node*2 +1;
  41.     int mid= (b+e)/2;
  42.     update(left,b,mid,i,newvalue);
  43.     update(right,mid+1,e,i,newvalue);
  44.     tree[node] = tree[left]+tree[right];
  45. }
  46. int main()
  47. {
  48.     int n;
  49.     cin>>n;
  50.     for(int i=0;i<n;i++){
  51.         cin>>ar[i];
  52.     }
  53.     ini(1,0,n-1);
  54.     int q;
  55.     cin>>q;
  56.     while(q--){
  57.         int a;
  58.         cin>>a;
  59.         if(a==1){
  60.             int x;
  61.             double y;
  62.             cin>>x>>y;
  63.             update(1,0,n-1,x-1,y);
  64.         }
  65.         else{
  66.             int m,nn;
  67.             cin>>m>>nn;
  68.             double que=query(1,0,n-1,m-1,nn-1);
  69.             double v=(que/(nn-m+1.0));
  70.             cout<<fixed<<setprecision(6)<<v<<endl;
  71.         }
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement