Pagini recente » Cod sursa (job #1912740) | Cod sursa (job #288839) | Cod sursa (job #1281240) | Cod sursa (job #2753774) | Cod sursa (job #2488048)
#include <iostream>
#include <bits/stdc++.h>
#define in_file "datorii.in"
#define out_file "datorii.out"
using namespace std;
void printVec(vector<int> v)
{
for(auto e : v)
{
fprintf(stdout, "%d, ", e);
}
}
vector<int> segmentTree(1<<14+1, 0);
int getSegTreeSize(int n){
int s=1;
while(s<n) s*=2;
return s;
}
void updateTree(int idx, int val){
segmentTree[idx] -= val;
idx /=2;
while(idx>0){
segmentTree[idx] = segmentTree[2*idx] + segmentTree[2*idx+1];
idx /=2;
}
}
int queryTree(int qLeft, int qRight, int idx, int tLeft, int tRight){
if(tRight < qLeft || tLeft > qRight) return 0;
if(qLeft <= tLeft && tRight <= qRight){
return segmentTree[idx];
}
int middle = (tLeft+tRight)/2;
return queryTree(qLeft, qRight, 2*idx, tLeft, middle)
+ queryTree(qLeft, qRight, 2*idx+1, middle+1, tRight);
}
int main()
{
freopen(in_file, "r", stdin);
freopen(out_file, "w", stdout);
int n, m;
int aux;
scanf("%d%d", &n, &m);
int tSize = getSegTreeSize(n);
for(int i=0; i<n; i++){
scanf("%d", &aux);
segmentTree[tSize+i] = aux;
}
for(int t=tSize-1; t>0; t--){
segmentTree[t] = segmentTree[2*t] + segmentTree[2*t+1];
}
int qType, p1, p2;
while(m--){
scanf("%d%d%d", &qType, &p1, &p2);
if(qType){
printf("%d\n", queryTree(p1, p2, 1, 1, tSize));
}
else{
updateTree(tSize+p1-1, p2);
}
}
return 0;
}