Pagini recente » Cod sursa (job #2493114) | Cod sursa (job #593252) | Cod sursa (job #1255714) | Cod sursa (job #2747056) | Cod sursa (job #2209871)
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
class fenwick_tree{ ///aib - arbore indexat binar sau Fenwick
int v[15005]={};
public:
///update - actualizeaza pozitia poz cu valoarea val
void update(int poz, const int val, const int n){
for( ; poz <= n; poz += poz&-poz){
v[poz] = v[poz] + val; } }
///functia constructor a clasei fenwick_tree
fenwick_tree(const int n){
int x;
for(int i = 1; i <= n; ++i){
f >> x;
update(i, x, n); } }
/// query_fenwick(poz) - calculeaza suma primilor poz elemente
int query_fenwick(int poz){
int rez = 0;
for( ; poz > 0; poz -= poz&-poz){
rez += v[poz]; }
return rez; }
/// query_fenwick(a,b) - calculeaza suma elementelor de la poz a la poz b
int query_fenwick(const int a, const int b){
return query_fenwick(b) - query_fenwick(a-1); } };
int main() {
int n, m,t,a,b;
f >> n >> m;
fenwick_tree arb(n);
for (int i = 1; i <= m; i++) {
f >> t >> a >> b;
if(t==0) {
/// actualizez cu valoarea -b pt pozitia a
arb.update(a, -b, n);
}
if(t==1){
///afisez suma elementelor de la poz a la poz b
g << arb.query_fenwick(a, b) <<endl;
}
}
return 0;
}