Дерево отрезков. Нахождение суммы и присвоение
Решал задачу: Дан массив из N элементов, нужно научиться находить сумму чисел на отрезке.
Формат ввода
Первая строка содержит два целых числа N и K — число чисел в массиве и количество запросов. ( 1 ≤ N ≤ 1 0 0 0 0 0 ) , ( 0 ≤ K ≤ 1 0 0 0 0 0 ) . Следующие K строк содержат запросы “A i x” — присвоить i -му элементу массива значение x ( 1 ≤ i ≤ n , 0 ≤ x ≤ 1 0 ^ 9 ) “Q l r” — найти сумму чисел в массиве на позициях от l до r . ( 1 ≤ l ≤ r ≤ n ) Изначально в массиве живут нули.
Формат вывода
На каждый запрос вида Q l r нужно вывести единственное число — сумму на отрезке.
Пример: Ввод
5 9
A 2 2
A 3 1
A 4 2
Q 1 1
Q 2 2
Q 3 3
Q 4 4
Q 5 5
Q 1 5 Вывод: 0 2 1 2 0 5 Вот мой код:
void update(int v,int tl,int tr, int pos,int x,vector<ll>& t){
if(tl==tr)
t[v]=x;
else{
int tm=(tl+tr)>>1;
if(pos<=tm)
update(v*2,tl,tm,pos,x,t);
else
update(v*2+1,tm+1,tr,pos,x,t);
t[v]=t[v*2]+t[v*2+1];
}
}
int get(int v,int tl,int tr,int l,int r,vector<ll>& t){
if(tl==l&&tr==r)
return t[v];
int ans=0;
int tm=(tl+tr)>>1;
if(l<=tm)
ans+=get(v*2,tl,tm,l,min(r,tm),t);
if(r>tm)
ans+=get(v*2+1,tm+1,tr,max(l,tm+1),r,t);
return ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,k,l,r;
cin>>n>>k;
vector<ll> t(4*n);
char c;
for (int i=0;i<k;++i){
cin>>c;
cin>>l>>r;
if(c=='A')
update(1,1,n,l,r,t);
else
cout<<get(1,1,n,l,r,t)<<'\n';
}
return 0;
}
Программа правильно работает на примере, проходит 4 теста, а затем выдает неправильный результат. Подскажите, пожалуйста, в чем может быть ошибка.