Cod sursa(job #2779666)

Utilizator CatalinPangaleanuCatalin Pangaleanu CatalinPangaleanu Data 4 octombrie 2021 17:54:15
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

//#pragma GCC optimize("Ofast")

using namespace std;

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

int t[30000];

void Update(int pos, int val, int n)
{
    for (t[pos+=n]-=val;pos>1;pos/=2)
        t[pos/2]=t[pos]+t[pos^1];
}

int Compute(int l, int r, int n)
{
    int ans;
    ans=0;
    for (l+=n, r+=n;l<r;l/=2, r/=2)
    {
        if (l%2)
            ans+=t[l++];
        if (r%2)
            ans+=t[--r];
    }
    return ans;
}

int main()
{
    int n, Q, i, task, a, b;
    fin>>n>>Q;
    for (i=0;i<n;++i)
        fin>>t[n+i];
    for (i=n-1;i;--i)
        t[i]=t[i*2]+t[i*2+1];
    while (Q--)
    {
        fin>>task>>a>>b;
        if (!task)
            Update(a-1, b, n);
        else
            fout<<Compute(a-1, b, n)<<'\n';
    }
    fin.close();
    fout.close();

    return 0;
}