Cod sursa(job #2209871)

Utilizator mad_maxxMad Maxx mad_maxx Data 4 iunie 2018 22:28:42
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#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;
}