Cod sursa(job #1038085)

Utilizator alexandra99Alexandra Secheli alexandra99 Data 20 noiembrie 2013 23:20:18
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 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;
}