Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- const int sz=100005;
- double ar[3*sz];
- double tree[3*sz];
- void ini(int node,int b, int e)
- {
- if(b==e) {tree[node]=ar[b]; return ;}
- int left=node*2;
- int right = node*2 +1;
- int mid=(b+e)/2;
- ini(left,b,mid);
- ini(right,mid+1,e);
- tree[node]=tree[left]+tree[right];
- }
- double query(int node, int b, int e, int i, int j)
- {
- if(i>e||j<b) return 0;
- if(b>=i&&e<=j) return tree[node];
- int left= node*2;
- int right = node*2 +1;
- int mid= (b+e)/2;
- double p1= query(left,b,mid,i,j);
- double p2= query(right,mid+1,e,i,j);
- return p1+p2;
- }
- void update(int node,int b,int e,int i,double newvalue)
- {
- if(i>e||i<b) return;
- if(b>=i&&e<=i)
- {
- tree[node]= newvalue;
- return ;
- }
- int left=node*2;
- int right = node*2 +1;
- int mid= (b+e)/2;
- update(left,b,mid,i,newvalue);
- update(right,mid+1,e,i,newvalue);
- tree[node] = tree[left]+tree[right];
- }
- int main()
- {
- int n;
- cin>>n;
- for(int i=0;i<n;i++){
- cin>>ar[i];
- }
- ini(1,0,n-1);
- int q;
- cin>>q;
- while(q--){
- int a;
- cin>>a;
- if(a==1){
- int x;
- double y;
- cin>>x>>y;
- update(1,0,n-1,x-1,y);
- }
- else{
- int m,nn;
- cin>>m>>nn;
- double que=query(1,0,n-1,m-1,nn-1);
- double v=(que/(nn-m+1.0));
- cout<<fixed<<setprecision(6)<<v<<endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement