Cod sursa(job #2424073)

Utilizator derihvist28Derihvist Adelina derihvist28 Data 22 mai 2019 16:19:19
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.03 kb
#include <bits/stdc++.h>
using namespace std;
int c[20000], v[20000], n, m, i, j;
 
void chng(int index, int val, char ok)
{
 int p1, p2;
 
 p1 = 0;
 p2 = 1;
 while (index <= n)
 {
  if (ok == '+')
   c[index] += val;
   else
    c[index] -= val;
 
  while ((index & p2) == 0)
  {
   p1++;
   p2 *= 2;
  }
  index += p2;
 }
}
 
int sum(int st, int dr)
{
 int s1, s2, p1, p2;
 s1 = 0;
 p1 = 0;
 p2 = 1;
 while (dr > 0)
               {
                 s1 += c[dr];
                 while ((dr & p2) == 0)
                                       {
                                          p1++;
                                          p2 *= 2;
                                       }
                 dr -= p2;
               }
 s2 = 0;
 p1 = 0;
 p2 = 1; st--;
 while (st > 0)
               {
                 s2 += c[st];
                 while ((st & p2) == 0)
                                        {
                                          p1++;
                                          p2 *= 2;
                                        }
                 st -= p2;
              }
 return s1-s2;
}
 
int main()
{
    ifstream cin ("datorii.in");
	ofstream cout ("datorii.out");
	cin >> n >> m;
	for (i=1; i<=n; i++)
                         {
                            cin >> v[i];
                            chng(i, v[i], '+');
                         }
 
    int x, a, b;
    for (j=1; j<=m; j++)
                        {
                          cin >> x;
                          if (x == 1)
                                      {
                                        cin >> a >> b;
                                        cout << sum(a, b) << endl;
                                      }
                              else
                                      {
                                        cin >> a >> b;
                                        chng(a, b, '-');
                                      }
                        }
 return 0;
}