Cod sursa(job #1231601)

Utilizator BFlorin93Balint Florin-Lorand BFlorin93 Data 21 septembrie 2014 00:37:51
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>

#define zeroes(x) (x&(-x))

using namespace std;

int *aib;
int n;
int m;


void Pay(int pos,int ammount)
{
    for (int i=pos;i<=n;i+=zeroes(i))
        {
            aib[i] -= ammount;
        }
}

void Add(int pos,int ammount)
{
    for (int i=pos;i<=n;i+=zeroes(i))
        {
            aib[i] += ammount;
        }
}

int Compute(int pos)
{
    int ret = 0;

    for (int i=pos;i>0;i-=zeroes(i))
    {
        ret += aib[i];
    }

    return ret;
}



int main()
{

    //open files
    ifstream infile;
    infile.open("datorii.in");
    fstream outfile;
    outfile.open("datorii.out");

   //initialize inputs
   infile >> n;
   infile >> m;

   aib = new int[n+1];

   for (int i=1;i<=n;i++)
   {
       aib[i] = 0;
   }

   int index;
   for (int i=1;i<=n;i++)
   {
    infile >> index;
    Add(i,index);
   }


    //do operations;
   for (int i =1 ;i<=m;i++)
   {
       char bit;
       infile >> bit;

       if (bit == '0')
       {
           int day,ammount;
           infile >> day >> ammount;

           Pay(day,ammount);
       }

       else
       {
           int dayFrom,toDay;
           infile >> dayFrom >> toDay;

           outfile << (Compute(toDay) - Compute(dayFrom-1)) << "\n";
       }
   }

    return 0;
}