Submission
Status:
PPPPPPPPPPPPPPPPPPPP
Score: 100
User: Newtonabc
Problemset: ผลบวก (ยาก)
Language: cpp
Time: 0.080 second
Submitted On: 2024-09-30 21:21:25
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
const int M=1<<21;
int arr[N],s[M];
void build(int l,int r,int idx){
if(l==r){
s[idx]=arr[l];
return;
}
int m=(l+r)/2;
build(l,m,idx*2);
build(m+1,r,idx*2+1);
s[idx]=s[idx*2]+s[idx*2+1];
}
void update(int l,int r,int idx,int x,int val){
if(x<l || x>r) return;
if(l==r){
s[idx]=val;
return;
}
int m=(l+r)/2;
update(l,m,idx*2,x,val);
update(m+1,r,idx*2+1,x,val);
s[idx]=s[idx*2]+s[idx*2+1];
}
int query(int l,int r,int idx,int a,int b){
if(b<l || a>r) return 0;
if(a<=l && b>=r) return s[idx];
int m=(l+r)/2;
return query(l,m,idx*2,a,b)+query(m+1,r,idx*2+1,a,b);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,q;
cin>>n;
for(int i=0;i<n;i++) cin>>arr[i];
build(0,n-1,1);
cin>>q;
while(q--){
int t,ta,tb;
cin>>t;
while(t--){
int a,b;
cin>>a >>b;
update(0,n-1,1,a,b);
}
cin>>ta >>tb;
cout<<query(0,n-1,1,ta,tb) <<"\n";
}
}