Cod sursa(job #1037155)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 19 noiembrie 2013 22:03:09
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <cstdlib>
using namespace std;

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

int n, m;
int AIB[100001];

int zeros (int valoare)
{
  return (valoare & (valoare - 1)) ^ valoare;
}

void update (int pozitie, int valoare)
{
  for (int i = pozitie; i <= n; i += zeros(i)) 
    AIB[i] += valoare;
}

int query (int pozitie)
{
  int suma = 0;

  for (int i = pozitie; i > 0; i -= zeros(i))
    suma += AIB[i];
  
  return suma;
}

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

  while (m --> 0)
    {
      int queryType; in >> queryType;
      int a, b; in >> a >> b;

      switch (queryType)
	{
	case 0:
	  update (a, -b);
	  break;
	case 1:
	  out << query(b) - query(a - 1) << "\n";
	  break;
	default:
	  exit(1);
	}
    }

  in .close();
  out.close();

  return 0;
}