Pagini recente » Cod sursa (job #1563582) | Cod sursa (job #1203809) | Cod sursa (job #2480268) | Cod sursa (job #1928288) | Cod sursa (job #2485334)
#include <fstream>
using namespace std;
#define ull unsigned long long int
ifstream cin("datorii.in");
ofstream cout("datorii.out");
ull l[15001];
struct aint{
aint *a = NULL, *b = NULL;
ull l, r, v = 0;
aint(ull x, ull y){
l = x;
r = y;
}
};
ull build(aint *node){
if(node->l == node->r){
//cout<<l[node->l]<<"!\n";
return node->v = l[node->l];
}else{
ull m = node->l + (node->r - node->l)/2;
node->a = new aint(node->l, m);
node->b = new aint(m + 1, node->r);
return node->v = build(node->a) + build(node->b);
}
}
void add(aint *node, ull target, ull val){
node->v += val;
if(node->l != node->r){
if(target <= node->a->r)
add(node->a, target, val);
else add(node->b, target, val);
}
}
ull query(aint *node, ull l, ull r){
if((l == node->l) && (r == node->r))
return node->v;
else if(r <= node->a->r)
return query(node->a, l, r);
else if(l >= node->b->l)
return query(node->b, l, r);
else return query(node->a, l, node->a->r) + query(node->b, node->b->l, r);
}
int main(){
ull n, m;
cin>>n>>m;
for(ull x = 1;x<=n;x++)
cin>>l[x];
aint *root = new aint(1, n);
//cout<<
build(root);
for(ull x = 0;x<m;x++){
ull a, b, c;
cin>>a>>b>>c;
if(a){
cout<<query(root, b, c)<<'\n';
}else{
add(root, b, -c);
}
}
return 0;
}