Cod sursa(job #2883640)

Utilizator matei8787Matei Dobrea matei8787 Data 1 aprilie 2022 17:42:30
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<bits/stdc++.h>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int aib[15005];
int n, m;
int lsb(int x)
{
    return ( ~x + 1 ) & x;
}
void update(int poz, int val)
{
    for ( int i = poz ; i <= n ; i += lsb(i) )
    {
        aib[i] += val;
    }
}
void citire()
{
    in>>n>>m;
    for ( int i = 1 ; i <= n ; i++ )
    {
        int aux;
        in>>aux;
        update(i, aux);
    }
}
int prefSum(int poz)
{
    int suma = 0;
    for ( int i = poz ; i >= 1 ; i -= lsb(i) )
    {
        suma += aib[i];
    }
    return suma;
}
void query(int st, int dr)
{
    out<<prefSum(dr) - prefSum(st-1)<<'\n';
}
void rez()
{
    for ( int i = 1 ; i <= m ; i++ )
    {
        int a, b, c;
        in>>c>>a>>b;
        if ( c == 0 )
        {
            update(a, -1*b);
        }
        else
        {
            query(a, b);
        }
    }
}
int main()
{
    citire();
    rez();
    return 0;
}