Cod sursa(job #2502727)

Utilizator vxpsnVictor Pusnei vxpsn Data 1 decembrie 2019 14:50:36
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <bits/stdc++.h>

using namespace std;

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

#define for0(AAA, BBB) for(ll AAA = 0; AAA < BBB; ++AAA)
#define for1(AAA, BBB) for(ll AAA = 1; AAA <= BBB; ++AAA)
#define zeros(x) ( (x ^ (x - 1)) & x )

#ifndef ONLINE_JUDGE
#else
#define in cin
#define out cout
#endif

typedef long long ll;
typedef unsigned long long ull;

const ll nmx = 2e5+ 5;
const ll inf = 1<<30;
const ll MOD = 1e9 + 7;
const ll dx[4] = {-1, 0, 1,  0};
const ll dy[4] = { 0, 1, 0, -1};
const string YES = "YES";
const string NO = "NO";

bool _comp(const pair<ll,ll> &A, const pair<ll,ll> &B) {
    return A.first < B.first || (A.first == B.first && A.second < B.second);
}

ll N, M, a[nmx], aib[nmx];

void Add(ll x, ll quantity)
{
    for (int i = x; i <= N; i += zeros(i))
        aib[i] += quantity;
}

ll Compute(ll x)
{
    ll ret = 0;
    for (int i = x; i > 0; i -= zeros(i))
        ret += aib[i];
    return ret;
}

ll sum(ll left, ll right) {
    return Compute(right) - Compute(left - 1);
}

int main() {
    ios::sync_with_stdio(0);

    in>>N>>M;

    for(int i = 1; i <= N; ++i) {
        in>>a[i];
        Add(i, a[i]);
    }

    while(M--) {
        ll op, p, q;
        in>>op>>p>>q;
        if(op == 0) {
            Add(p, -q);
        }
        else {
            out<<sum(p, q)<<"\n";
        }
    }

    return 0;
}