Cod sursa(job #582244)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 15 aprilie 2011 09:16:21
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#define NMAX 15015

using namespace std;

int a[NMAX], n, m;

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

int ult1(int x)
{
    return (x^(x-1))&x;
}

int suma(int poz, int lim)
{
    int s=0;
    while (poz>lim)
	  s+=a[poz], poz-=ult1(poz);
    return s;
}

void Citeste()
{
    int i;
    f>>n>>m;
    for (i=1; i<=n; ++i)
    {
	  f>>a[i];
	  a[i]+=suma(i-1, i-ult1(i));
    }
}

void Update(int poz, int v)
{
    while (poz<=n)
	  a[poz]+=v, poz+=ult1(poz);
}

void Solve()
{
    int op, x, y;
    while (m--)
    {
	  f>>op>>x>>y;
	  if (op==0) Update(x, -y);
	  else g<<suma(y, 0)-suma(x-1, 0)<<"\n";
    }
}

int main()
{
    Citeste();
    
    Solve();
    
    f.close();
    g.close();
    return 0;
}