Cod sursa(job #2754929)

Utilizator petru.burdusaBurdusa Petru petru.burdusa Data 26 mai 2021 17:59:15
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int arbint[400005];
int v;
int n, q, op, x, y;

void Update( int nod, int st, int dr, int pos, int val )
{
    cout<<"update\n";
    if( st == dr )
    {
        arbint[nod] += val;
        return;
    }
    int mid = (st+dr)/2;
    if(pos <= mid) Update( nod * 2, st, mid, pos, val );
    else Update( nod * 2 + 1, mid + 1, dr, pos, val );
    arbint[nod] =  arbint[nod*2] + arbint[nod*2+1];
}

int Query(int nod, int st, int dr, int l, int r)
{
    cout<<"query\n";
    if(l <= st && dr <= r) return arbint[nod];
    int mid = (st + dr) / 2;
    int ans1=0, ans2=0;
    if(l <= mid) ans1 = Query(nod * 2, st, mid, l, r);
    if(r > mid) ans2 = Query(nod * 2 + 1, mid + 1, dr, l, r);
    return ans1 + ans2;
}

int main()
{
    in>>n>>q;
    cout<<n<<' '<<q<<' ';
    for( int i=1;i<=n;++i)
    {
        in >> v;
        Update(1, 1, n, i, v);
    }
    for( int i=1;i<=q;++i)
    {
        in>>op>>x>>y;
        if(op==1)
            out<<Query(1, 1, n, x, y) << '\n';
        else
            Update(1, 1, n, x, -y);
    }
}