Cod sursa(job #3211367)

Utilizator radu1331Mocan Radu radu1331 Data 9 martie 2024 10:52:38
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,fma")
using namespace std;
#define fastIO ios_base::sync_with_stdio(NULL);cin.tie(NULL);
#define testCases int tc;cin>>tc;while(tc--);
#define ll long long
#define ld long double
#define zeros(x) ((x^(x-1))&x)
#define sza(x) ((int)x.size())
#define all(a) (a).begin(),(a).end()
#define PI 3.1415926535897932384626433832795l
template<typename T> inline T gcd(T a,T b){return (b?__gcd(a,b):a);}
template<typename T> inline T lcm(T a,T b){return (a*(b/gcd(a,b)));}
const int NMAX = 5 * 1e5 + 5;
int n, m, AIB[NMAX];

static inline void solve();
int query(int v)
{
    int sum = 0;
    for (int i = v; i > 0; i -= zeros(i)) sum += AIB[i];
    return sum;
}
void update(int p, int v)
{
    for (int i = p; i <= n; i += zeros(i)) AIB[i] += v;
}

int main(int argc, char** argv)
{
    (void)! freopen ("datorii.in", "r", stdin);
    (void)! freopen ("datorii.out", "w", stdout);
    fastIO

    // testCases
    solve();

    return 0;
}

static inline void solve()
{
    cin >> n >> m;
    int x;
    for (int i = 1; i <= n; ++i) cin >> x, update(i, x);
    while (m--)
    {
        int cod, t, v; cin >> cod >> t >> v;
        if (cod == 0)
        {
            update(t, -v);
        }
        else if (cod == 1)
        {
            cout << query(v) - query(t - 1) << '\n';
        }
    }
}