Pagini recente » Cod sursa (job #1095693) | Cod sursa (job #430001) | Cod sursa (job #1652191) | Cod sursa (job #2462018) | Cod sursa (job #2367300)
#include <queue>
#include <vector>
#include <fstream>
using namespace std;
unsigned int n, m, u, v;
vector<int> A;
vector<int> aib;
bool op;
int sum(int x, int y){
int suma = 0;
for(int k = y; k; k &= k - 1){
suma += aib[k];
}
for(int k = x - 1; k; k &= k - 1){
suma -= aib[k];
}
return suma;
}
void update(int a, int val){
for(int x = a; x <= n; x += x & -x){
aib[x] -= val;
}
}
int main(){
queue<int> res;
fstream f("datorii.in", fstream::in);
f >> n >> m;
A = vector<int>(n);
aib = vector<int>(n + 1);
for(int i = 0; i < n; i++){
f >> A[i];
for(int j = i + 1; j <= n; j += j & -j){
aib[j] += A[i];
}
}
for(int q = 0; q < m; q++){
f >> op >> u >> v;
if(!op){
update(u, v);
}
else{
res.push(sum(u, v));
}
}
f.close();
f.open("datorii.out", fstream::out);
while(res.size()){
f << res.front() << endl;
res.pop();
}
}