Cod sursa(job #3303911)

Utilizator DragosVNVisanescu Dragos Nicholas DragosVN Data 18 iulie 2025 21:58:35
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m;


class AIB{

    private:
    vector<int>v;

    int lsb(int x)
    {

        return (x&(-x));
    }
    public:
    AIB(int n)
    {
        v.resize(n+1);
        for(int i=0;i<=n;i++)
            v[i]=0;
    }

    void update(int poz,int val)
    {
        for(int i=poz;i<v.size();i+=lsb(i))
            v[i]+=val;
    }
    int query(int poz)
    {
        int ans=0;
        for(int i=poz;i>0;i-=lsb(i))
            ans+=v[i];
        return ans;
    }
};
int main()
{
    f>>n>>m;
    AIB aib(n);
    for(int i=1;i<=n;i++)
    {
       int x=0;
       f>>x;
       aib.update(i,x);
    }

    for(int i=1;i<=m;i++)
    {
        int op=0;
        f>>op;
        if(op==0)
        {
            int poz=0,val=0;
            f >> poz >> val;
            aib.update(poz,-val);
        }
        else
        {
            int st=0,dr=0;
            f >> st >> dr;
            g << aib.query(dr) - aib.query(st-1)<<'\n';
        }
    }
    return 0;
}