Cod sursa(job #1231768)

Utilizator robertstrecheStreche Robert robertstreche Data 21 septembrie 2014 14:46:24
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>

#define lmax 15005
#define bin(x) x&(-x)

using namespace std;

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

int n,m;

int v[lmax];

inline void ad(int x,int poz)
{
    for (int i=poz;i<=n;i+=bin(i))
     v[i]+=x;
}

inline void achitare(int x,int poz)
{
    for (int i=poz;i<=n;i+=bin(i))
     v[i]-=x;
}

inline int suma(int poz)
{
   int su=0;

   for (int i=poz;i>=1;i-=bin(i))
    su+=v[i];

    return su;
}

int main()
{
   int i,x,y,t,poz;

   f>>n>>m;

   for (i=1;i<=n;i++)
    {
        f>>x;

        ad(x,i);
    }

    for (i=1;i<=m;i++)
     {
         f>>t;

         if (t==0)
          {
              f>>poz>>x;

              achitare(x,poz);
          }
         if (t==1)
          {
              f>>x>>y;

              g<<suma(y)-suma(x-1)<<'\n';
          }
     }

   f.close();
   g.close();
}