Cod sursa(job #2999506)

Utilizator CobzaruAntonioCobzaru Paul-Antonio CobzaruAntonio Data 11 martie 2023 09:29:38
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>

using namespace std;
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");
int v[60005];
int a[15005];
int n,m;
int qst,qdr;
int t,val;
void construire (int vf,int st,int dr)
{
    if (st == dr)
    {
        v[vf] = a[st];
        return;
    }
    int mij = (st+dr)/2;
    construire(2*vf,st,mij);
    construire(2*vf+1,mij+1,dr);
    v[vf] = v[2*vf] + v[2*vf+1];
}
void update (int vf,int st,int dr)
{
    if (st == dr && qst == st)
    {
        v[vf] = v[vf] - val;
        return;
    }
    int mij = (st+dr)/2;
    if (qst <= mij)
        update(2*vf,st,mij);
    if (qdr > mij)
        update(2*vf+1,mij+1,dr);
    int s = 0;
    s = s + v[2*vf] + v[2*vf+1];
    v[vf] = s;
}
int query (int vf,int st,int dr)
{
    if (st >= qst && qdr>=dr)
        return v[vf];
    int mij = (st+dr)/2;
    int s = 0;
    if (qst <= mij)
        s = s + query(2*vf,st,mij);
    if (qdr > mij)
        s = s + query(2*vf+1,mij+1,dr);
    return s;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    int i,j;
    for (i=1;i<=n;i++)
        cin >> a[i];
    construire(1,1,n);
    for (i=1;i<=m;i++)
    {
        int c;
        cin >> c;
        if (c==0)
        {
            cin >> t >> val;
            qst = qdr = t;
            update(1,1,n);
        }
        else
        {
            cin >> qst >> qdr;
            cout << query(1,1,n) << '\n';
        }
    }
    return 0;
}