Cod sursa(job #3004269)

Utilizator DomnulMilandruMilandru Nicon-David DomnulMilandru Data 16 martie 2023 11:02:30
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb

#include <fstream>
#include <vector>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int n,m;
vector<int> AIB;
int zeros(int x)
{
    return (x^(x-1))&x;
}
void Update1(int poz,int val)
{
    for(int i=poz;i<=n;i=i+zeros(i))
      AIB[i]=AIB[i]+val;
}
void Update2(int poz,int val)
{
    for(int i=poz;i<=n;i=i+zeros(i))
      AIB[i]=AIB[i]-val;
}
long long Compute(int poz)
{
    long long s=0;
    for(int i=poz;i>=1;i=i-zeros(i))
       s=s+AIB[i];
    return s;
}
int main()
{
    cin>>n>>m;
    int x;
    AIB.resize(n+1);
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        Update1(i,x);
    }
    for(int i=1;i<=m;i++)
    {
        bool ok;
        int a,b;
        cin>>ok>>a>>b;
        if(ok==0)
           Update2(a,b);
        else
        cout<<Compute(b)-Compute(a-1)<<'\n';
    }
    return 0;
}