Pagini recente » Cod sursa (job #1606885) | Cod sursa (job #2138899) | Statistici Iulia Mihaicuta (iulia.mihaicuta) | Cod sursa (job #1532390) | Cod sursa (job #744265)
Cod sursa(job #744265)
//Include
#include <fstream>
using namespace std;
//Constante
const int MAX_SIZE = 10001;
//Functii
void update(int position, int value);
int query(int position);
//Variabile
ifstream in("aib.in");
ofstream out("aib.out");
int elementNumber, operationNumber;
int operation;
int tree[MAX_SIZE];
//Main
int main()
{
in >> elementNumber >> operationNumber;
int val;
for(int i=1 ; i<=elementNumber ; ++i)
{
in >> val;
update(i, val);
}
while(operationNumber--)
{
in >> operation;
if(operation == 1) // update
{
int pos, val;
in >> pos >> val;
update(pos, val);
}
else // query
{
int lf, rt;
in >> lf >> rt;
out << query(rt) - query(lf-1) << '\n';
}
}
in.close();
out.close();
return 0;
}
void update(int position, int value)
{
int power = 0;
while(position <= elementNumber)
{
tree[position] += value;
while(!(position & (1<<power)))
++power;
position += (1<<power);
++power;
}
}
int query(int position)
{
int sum = 0;
int power = 0;
while(position)
{
sum += tree[position];
while(!(position & (1<<power)))
++power;
position -= (1<<power);
}
return sum;
}