Cod sursa(job #2636427)

Utilizator mihai03Mihai Grigore mihai03 Data 17 iulie 2020 23:33:18
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#define zeros(x) ((x^(x-1))&x)
using namespace std;

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

const int maxx = 15005;

int n, m;

int a[maxx];
int aib[maxx];

void Subtract(int poz, int val)
{
    for(int i = poz; i <= n; i += zeros(i))
    {
        aib[i] -= val;
    }
}

int Query(int limit)
{
    int rez = 0;
    for(int i = limit; i >= 1; i -= zeros(i))
    {
        rez += aib[i];
    }
    return rez;
}

int main()
{
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        fin >> a[i];
        Subtract(i, -a[i]);
    }

    for(int i = 1; i <= m; i++)
    {
        int cod;
        fin >> cod;
        if(cod)
        {
            int p, q;
            fin >> p >> q;
            int ans = Query(q) - Query(p - 1);
            fout << ans << "\n";
        }
        else
        {
            int t, v;
            fin >> t >> v;
            Subtract(t, v);
        }
    }

    return 0;
}