Cod sursa(job #1685865)

Utilizator MaraaMMihali Mara MaraaM Data 11 aprilie 2016 21:41:18
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
using namespace std;
#define zeros(x) ((x^(x-1))&x)
#define NMax 15005
ifstream f("datorii.in");
ofstream g("datorii.out");
long long int AIB[NMax];
int N,M;
void update_aib(int,int);
int query_aib(int);
void read();
void solve();
int main()
{
    read();
    solve();
    return 0;
}
void read()
{
    f>>N>>M;
    for(int i=1;i<=N;i++)
    {   int x;
        f>>x;
        update_aib(i,x);
    }
}
void solve()
{
    for(int i=1;i<=M;++i)
   {


        int what,a,b;
        f>>what>>a>>b;
        if(what==0)
            update_aib(a,-b);
            else
                g<<query_aib(b)-query_aib(a-1)<<'\n';
    }
}
void update_aib(int poz,int val)
{
    int i;
    for(i=poz;i<=N;i+=zeros(i))
          AIB[i]+=val;
}
int query_aib(int poz)
{
    int i,ans=0;
    for(i=poz;i>0;i-=zeros(i))
        ans+=AIB[i];
    return ans;
}