Cod sursa(job #1733386)

Utilizator r00t_Roman Remus r00t_ Data 24 iulie 2016 16:41:56
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <cmath>

#define zeros(x)((x^(x-1))&x)
using namespace std;

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

    int n,m,v1[1000000],AIB[1000000],tip,a,b;

void Add(int x, int quantity)
{
    int i;
    for (i = x; i <= n; i += zeros(i))
        AIB[i] += quantity;
}

int Compute(int x)
{
    int i, ret = 0;

    for (i = x; i > 0; i -= zeros(i))
        ret += AIB[i];
    return ret;
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        fin>>v1[i];

    for(int i=1;i<=n;i++)
        for(int j=i-zeros(i)+1; j<=i; j++)
            AIB[i]+=v1[j];

    for(int i=1;i<=m;i++){
        fin>>tip;
        if(tip==1){
            fin>>a>>b;
            fout<<Compute(b)-Compute(a-1)<<'\n';
        }
        else {
            fin>>a>>b;
            Add(a,-b);
        }
    }

    return 0;
}