Cod sursa(job #2733853)

Utilizator cdenisCovei Denis cdenis Data 31 martie 2021 00:03:35
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb

#include <iostream>
#include <fstream>

using namespace std;

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

int n,m,x,v[15005],tree[60010],pos,val,type,sum,st,dr;

void update(int node, int left, int right)
{
    if(left==right)
    {
        tree[node]=val;
        return;
    }
    int mid=(left+right)/2;
    if(pos<=mid)
        update(2*node,left,mid);
    else
        update(2*node+1,left,mid);
    tree[node]=tree[2*node]+tree[2*node+1];
}

void query(int node, int left, int right)
{
    if(st<=left && right<=dr)
    {
        sum+=tree[node];
        return;
    }
    int mid=(left+right)/2;
    if(st<=mid)
        query(2*node,left,mid);
    if(mid<dr)
        query(2*node+1,mid+1,right);
}

int main()
{
    fin >> n >> m;
    for(pos=1;pos<=n;pos++)
    {
        fin >> val;
        v[pos]=val;
        update(1,1,n);
    }
    while(m--)
    {
        fin >> type;
        if(type==0)
        {
            fin >> pos >> val;
            v[pos]-=val;
            val=v[pos];
            update(1,1,n);
        }
        else
        {
            fin >> st >> dr;
            sum=0;
            query(1,1,n);
            fout << sum << '\n';
        }
    }
    return 0;
}