Pagini recente » Cod sursa (job #2058487) | Cod sursa (job #145864) | Cod sursa (job #111356) | Cod sursa (job #2362343) | Cod sursa (job #3222456)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
const int N = 15000;
const int L = 17;
ifstream fin("datorii.in");
ofstream fout ("datorii.out");
class BIT {
private:
vector<int> bit;
public:
BIT(int size=0) : bit(size+1,0){};
void resize(int size){
bit.resize(size+1);
};
void display(){
for (size_t i = 0; i <bit.size(); i++){
cout << bit[i] << ' ';
}
cout << '\n';
}
void update(int index,int value){
index++;
while (index < bit.size()){
bit[index] +=value;
index+= index & (-index);
}
}
int query(int index){
int sum = 0;
while (index>0){
sum+=bit[index];
index -= index & (-index);
}
return sum;
}
int two_point_query(int st,int dr){
return query(dr)-query(st);
}
int get(int index){
return bit[index];
}
};
vector<int> v;
int n,k;
int main(){
fin >> n >> k;
v.resize(n);
BIT bit;
bit.resize(n);
for (int i = 0; i <n; ++i) {
fin >> v[i];
}
for (int i = 0; i <n; ++i) {
bit.update(i,v[i]);
}
bit.display();
for (int i = 0; i <k; ++i) {
int tip;
fin >> tip;
if (!tip){
int poz,val;
fin >> poz >> val;
bit.update(poz-1,(-1)*val);
}else{
int a,b;
fin >> a >>b;
fout << bit.two_point_query(a-1,b)<<'\n';
}
}
bit.display();
return 0;
}