Pagini recente » Cod sursa (job #69333) | Cod sursa (job #327639) | Cod sursa (job #3190182) | Cod sursa (job #550118) | Cod sursa (job #2446424)
// Matteo Verzotti - C++
// Solutie cu arbori indexati binar
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <ctime>
#include <map>
#include <chrono>
#include <cmath>
#define INF 0x3f3f3f3f
#define MAX(a,b) a>b ? a:b
#define MIN(a,b) a<b ? a:b
#define lsb(i) i & (-i)
using namespace std;
const int N = 15000;
int aib[5 + N];
int n;
void Add(int nod, int sum){
for(int i = nod; i <= n; i += lsb(i))
aib[i] += sum;
}
void Update(int nod, int sum){
for(int i = nod; i <= n; i += lsb(i))
aib[i] -= sum;
}
int GetSum(int nod){
int s = 0;
for(int i = nod; i >= 1; i -= lsb(i))
s += aib[i];
return s;
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
int m, p, x, y, i;
scanf("%d%d", &n, &m);
for(i = 1; i <= n; i++){
scanf("%d", &x);
Add(i,x);
}
for(i = 1; i <= m; i++){
scanf("%d%d%d", &p, &x, &y);
if(p == 0) Update(x,y);
else printf("%d\n",GetSum(y) - GetSum(x-1));
}
return 0;
}