Cod sursa(job #2556737)

Utilizator Florinos123Gaina Florin Florinos123 Data 25 februarie 2020 10:18:05
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>

using namespace std;

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

long long arbore[65536];
int n, m, i, x, poz;
int type, stanga, dreapta;
long long suma;

void update (int nod, int st, int dr)
{
    if (st == dr)
    {
        arbore[nod] += x;
        return;
    }

    int mij = (st + dr) / 2;;

     if (poz <= mij)
        update(2*nod, st, mij);
     else
        update(2*nod+1, mij+1, dr);

   arbore[nod] = arbore[2*nod] + arbore[2*nod+1];
}

void querry (int nod, int st, int dr)
{
    if (stanga <= st && dreapta >= dr)
    {
        suma += arbore[nod];
        return;
    }

    int mij = (st + dr) / 2;

    if (stanga <= mij)
       querry(nod*2, st, mij);
    if (mij < dreapta)
        querry(nod*2+1, mij+1, dr);
}

int main()
{
 f >> n >> m;
  for (i=1; i<=n; i++)
  {
      f >> x;
      poz = i;
      update(1, 1, n);
  }

  for (i=1; i<=m; i++)
  {
      f >> type >> stanga >> dreapta;
       if (type == 0)
       {
           poz = stanga;
           x = -dreapta;
           update(1, 1, n);
       }
       else if (type == 1)
       {
           suma = 0;
           querry(1, 1, n);
           g << suma << '\n';
       }
  }
    return 0;
}