Pagini recente » Cod sursa (job #251993) | Cod sursa (job #2651929) | Cod sursa (job #3237916) | Cod sursa (job #1450392) | Cod sursa (job #1507160)
#include <fstream>
#define nr_zerouri_la_puterea_2(x) ((x&(x-1))^x)
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int N,M,cod,indice,val,AIB[15010];
void citeste()
{
in>>N>>M;
for(int i=1;i<=N;i++)
{
indice=i;
in>>val;
while(indice<=N)
{
AIB[indice]+=val;
indice+=nr_zerouri_la_puterea_2(indice);
}
}
}
void achitare()
{
in>>indice>>val;
while(indice<=N)
{
AIB[indice]-=val;
indice+=nr_zerouri_la_puterea_2(indice);
}
}
void interogare()
{
int a,b;
in>>a>>b;
int suma_a=0;
--a;
while(a)
{
suma_a+=AIB[a];
a-=nr_zerouri_la_puterea_2(a);
}
int suma_b=0;
while(b)
{
suma_b+=AIB[b];
b-=nr_zerouri_la_puterea_2(b);
}
out<<suma_b-suma_a<<'\n';
}
void rezolva()
{
while(M--)
{
in>>cod;
if(cod) interogare();
else achitare();
}
}
int main()
{
citeste();
rezolva();
return 0;
}