Cod sursa(job #1355399)

Utilizator lucian666Vasilut Lucian lucian666 Data 22 februarie 2015 17:38:45
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb



#include <fstream>
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <utility>
#include <string>
#include <cstring>
#include <cstdlib>
#include <bitset>
#include <set>
#include <utility>
#include <vector>
#include <utility>
#include <tr1/unordered_map>

#define mp make_pair
#define pb push_back
#define oo 0x3f3f3f3f
#define f first
#define s second
#define dim 100009

using namespace std;

ifstream in("datorii.in");
ofstream out("datorii.out");

int n , m ;

int tree[dim];

int lsb( int x )
{

    return x & -x;

}

void add(int i , int val );
int sum( int x );
void Read();
void Solve();


int main()
{

    Read();
    Solve();

    return 0;

}

void Read()
{

    in >> n >> m;

    for( int i = 1 ; i <=n ; i++)
    {

        int x ;
        in >> x;
        add(i,x);

    }

}

void Solve()
{


    for( int i = 1 ; i<=m ; i++)
    {

        int tip ,  x , y;

        in >> tip >> x >> y;

        if( tip == 0)
            add(x,-y);
        else
        {

            int sum1 , sum2;
            sum2 = sum(y);
            sum1 = sum(x-1);

            out << sum2 - sum1 << '\n';

        }

    }

}

void add(int indice , int val )
{

    for( int i = indice ; i<=n ; i+=lsb(i) )
        tree[i] +=val;

}

int sum( int indice )
{
    int s = 0;
    for( int i = indice ; i>=1 ; i-=lsb(i) )
            s+=tree[i];

    return s;
}