Pagini recente » Cod sursa (job #834861) | Cod sursa (job #148643) | Cod sursa (job #990909) | Cod sursa (job #1414147) | Cod sursa (job #1826932)
#include <iostream>
#include <fstream>
using namespace std;
const int MAX = 15000;
int terminalZeros(int x){
return (x ^ (x - 1)) & x;
}
void updateAIB(int aib[], int dim, int pos, int val){
for(int i = pos; i <= dim; i += terminalZeros(i)){
aib[i] += val;
}
}
int queryAIB(int aib[], int x){
int result = 0;
for(int i = x; i > 0; i -= terminalZeros(i)){
result += aib[i];
}
return result;
}
int main(){
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m;
int aib[4 * MAX];
fin >> n >> m;
for(int i = 1; i <= n; i++){
int x;
fin >> x;
updateAIB(aib, n, i, x);
}
for(int i = 1; i <= m; i++){
int op, a, b;
fin >> op >> a >> b;
if(op == 0){
updateAIB(aib, n, a, -b);
}else if(op == 1){
fout << queryAIB(aib, b) - queryAIB(aib, a - 1) << "\n";
}
}
fin.close();
fout.close();
return 0;
}