Pagini recente » Cod sursa (job #2423537) | Cod sursa (job #206303) | Cod sursa (job #1109099) | Cod sursa (job #3030529) | Cod sursa (job #1231473)
#include <iostream>
#include <fstream>
#define left(x) ((x^(x-1))&x)
using namespace std;
int *aib;
int n;
int m;
void Pay(int pos,int ammount)
{
for (int i=pos;i<=n;i+=left(i))
{
aib[i] -= ammount;
}
}
void Add(int pos,int ammount)
{
for (int i=pos;i<=n;i+=left(i))
{
aib[i] += ammount;
}
}
int Compute(int pos)
{
int ret = 0;
for (int i=pos;i>0;i-=left(i))
{
ret += aib[i];
}
return ret;
}
int main()
{
//open files
FILE *infile,*outfile;
infile = fopen("datorii.in","r");
outfile = fopen("datorii.out","w");
//initialize inputs
fscanf(infile,"%d",&n);
fscanf(infile,"%d",&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++)
{
fscanf(infile,"%d",&index);
Add(i,index);
}
//do operations;
for (int i =1 ;i<=m;i++)
{
char bit;
fscanf(infile,"%d",&bit);
if (bit == '0')
{
int day,ammount;
fscanf(infile,"%d%d",day,ammount);
Pay(day,ammount);
}
else
{
int dayFrom,toDay;
fscanf(infile,"%d%d",dayFrom,toDay);
fprintf(outfile,"%d\n", (Compute(toDay) - Compute(dayFrom-1)) );
}
}
return 0;
}