Cod sursa(job #3328187)

Utilizator InformaticianInDevenire1Munteanu Mihnea Gabriel InformaticianInDevenire1 Data 6 decembrie 2025 18:41:16
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int aint[4*15005];

void Update(int node,int L,int R,int poz,int val){
    if (L==R){
        aint[node] += val; // Adaugă diferența la valoarea curentă
        return;
    }
    int mid = (L+R)/2;
    if (poz<=mid) Update(node*2,L,mid,poz,val);
    else Update(node*2+1,mid+1,R,poz,val);
    aint[node] = aint[node*2]+aint[node*2+1];
}

int Query(int node,int L,int R,int a,int b){
    if (a<=L and R<=b){
        return aint[node];
    }
    int mid = (L+R)/2;
    int leftSum = 0,rightSum = 0;
    if (a<=mid)leftSum = Query(node*2,L,mid,a,b);
    if (mid+1<=b) rightSum = Query(node*2+1,mid+1,R,a,b);
    return leftSum+rightSum;
}

int main()
{
    int n,m;
    fin >> n >> m;
    for (int i=1;i<=n;++i){
        int x;
        fin >> x;
        Update(1,1,n,i,x);
    }
    for (int i=1;i<=m;++i){
        int C,x,y;
        fin >> C >> x >> y;
        if (C==1){
            fout << Query(1,1,n,x,y) << '\n';
        }else{
            Update(1,1,n,x,-y);
        }
    }
    return 0;
}