Pagini recente » Cod sursa (job #2164084) | Cod sursa (job #775580) | Monitorul de evaluare | Cod sursa (job #2040378) | Cod sursa (job #3358774)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
vector <int> AIB;
int n;
int zeros(int x)
{
return (x ^ (x - 1)) & x;
}
void add(int x, int temp)
{
int i;
for(i = x; i <= n; i += zeros(i))
AIB[i] += temp;
}
int sum(int x)
{
int i, sum;
sum = 0;
for(i = x; i > 0; i -= zeros(i))
sum += AIB[i];
return sum;
}
int main()
{
int q, i, x, inde1, inde2;
bool val;
fin >> n >> q;
AIB.resize(n + 1);
for(i = 1; i <= n; i ++)
{
fin >> x;
add(i, x);
}
for(i = 1; i <= q; i ++)
{
fin >> val >> inde1 >> inde2;
if(val == 0)
add(inde1, -inde2);
if(val == 1)
fout << sum(inde2) - sum(inde1 - 1) << "\n";
}
return 0;
}