Cod sursa(job #826115)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 30 noiembrie 2012 01:42:26
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int n, m, a[15010];

inline void Update(int x, int y, int semn)
{
    while(x<=n)
    {
        a[x] += semn*y;
        x += (x&-x);
    }
}

inline int Query(int x)
{
    int s = 0;
    while(x)
    {
        s+=a[x];
        x-=(x&-x);
    }
    return s;
}

inline void Solve()
{
    ifstream f("datorii.in");
    ofstream g("datorii.out");
    f>>n>>m;
    int i, x, y, cod;
    for(i=1; i<=n; i++)
    {
        f>>x;
        Update(i, x, 1);
    }
    int val2, val1;
    while(m--)
    {
        f>>cod>>x>>y;
        if (cod == 0)
        {
            Update(x, y, -1);
        }
        else
        {
            val2 = Query(y);
            val1 = Query(x-1);
            //cout<<"y: "<<val2<<"\t\tx-1: "<<val1<<"\n";
            g<<(val2-val1)<<"\n";
        }
    }
    f.close();
    g.close();
}

int main()
{
    Solve();
    return 0;
}