Cod sursa(job #3254789)

Utilizator Luca_georgescuLucageorgescu Luca_georgescu Data 8 noiembrie 2024 20:24:18
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int n,m,c,a,b,v[15005],t[30005];

void update(int nod, int a, int b, int poz, int val)
{
    if ( a==b )
    {
        v[poz]=val;
        t[nod]=val;
        return;
    }
    int mij=(a+b)/2;
    if ( mij>=poz )
        update(2*nod,a,mij,poz,val);
    else update(2*nod+1,mij+1,b,poz,val);
    t[nod]=t[2*nod]+t[2*nod+1];
}

int query(int nod, int a, int b, int p, int q)
{
    if ( a>=p && b<=q )
        return t[nod];
    int collect_left=0;
    int collect_right=0;
    int mij=(a+b)/2;
    if ( mij>=p )
        collect_left=query(2*nod,a,mij,p,q);
    if ( mij+1<=q )
        collect_right=query(2*nod+1,mij+1,b,p,q);
    return (collect_right+collect_left);
}

void read()
{
    f >> n >> m;
    for (int i=1; i<=n; i++ )
    {
        f >> v[i];
        update(1,1,n,i,v[i]);
    }
}

int main()
{
    read();
    for (int i=1; i<=m; i++ )
    {
        f >> c >> a >> b;
        if ( c==1 )
            g << query(1,1,n,a,b) << '\n';
        else update(1,1,n,a,v[a]-b);
    }
    return 0;
}