Cod sursa(job #3169670)

Utilizator DomnulMilandruMilandru Nicon-David DomnulMilandru Data 15 noiembrie 2023 19:07:46
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb

#include <fstream>
#include <vector>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int n,m,x;
vector<int> A;
int zeros(int n)
{
    return n & (-n);
}
void update1(int nod,int e)
{
    for(int i=nod;i<=n;i=i+zeros(i))
      A[i]=A[i]+e;
}
void update2(int nod,int e)
{
    for(int i=nod;i<=n;i=i+zeros(i))
      A[i]=A[i]-e;
}
int suma(int nod)
{
    int s=0;
    for(int i=nod;i>=1;i=i-zeros(i))
      s=s+A[i];
    return s;
}
int q,a,b;
int main()
{
    cin>>n>>m;
    A.resize(n+1);
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        update1(i,x);
    }
    for(int i=0;i<m;i++)
    {
        cin>>q>>a>>b;
        switch (q)
        {
            case 0:
            {
                update2(a,b);
                break;
            }
            case 1:
            {
                cout<<suma(b)-suma(a-1)<<'\n';
            }
        }
    }
    return 0;
}