Cod sursa(job #2303211)

Utilizator mihailrazMihail Turcan mihailraz Data 15 decembrie 2018 20:29:22
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#define LSB(x) x^(x&(x-1))
#define NMAX 15000

using namespace std;
ifstream fi("datorii.in");
ofstream fo("datorii.out");
int n, m;
int X[NMAX+5], AIB[NMAX+5];

void update(int pos, int val)
{
    while(pos<=n)
    {
        AIB[pos]+=val;
        pos+=LSB(pos);
    }
}

void build(void)
{
    for(int i=1; i<=n; i++)
        update(i, X[i]);
}

int suma(int pos)
{
    int sum=0;
    while(pos)
    {
        sum+=AIB[pos];
        pos-=LSB(pos);
    }
    return sum;
}

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

    build();

    while(m--)
    {
        int q;
        fi>>q;
        if(q==0)
        {
            int t, v;
            fi>>t>>v;
            update(t, -v);
        }
        else
        {
            int p, q;
            fi>>p>>q;
            fo<<suma(q)-suma(p-1)<<"\n";
        }
    }

    fi.close();
    fo.close();
    return 0;
}