Cod sursa(job #1513198)

Utilizator LurchssLaurentiu Duma Lurchss Data 29 octombrie 2015 08:46:55
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>

#define nmax 15005
using namespace std;

int n,m;
int aib[nmax];
int x;
int tip,a,b;
int pow(int x)
{
    return (x ^ (x-1) & x);
}

void update(int i)
{
    for(int j=i;j<=n;)
    {
        aib[j]+=x-b;
        j+=pow(j);
    }
}

void read()
{
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d ",&x);
        update(i);
    }
    x=0;
}

int query(int i)
{
    int sum=0;
    for(int j=i;j>=1;)
    {
        sum+=aib[j];
        j-=pow(j);
    }
    return sum;
}

void solve()
{
    for(int i=1;i<=m;i++)
        {
            scanf("%d %d %d",&tip,&a,&b);
            if(tip==0)
            {
                update(a);
            }
            if(tip==1)
            {
                printf("%d\n",query(b)-query(a-1));
            }
        }
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    read();
    solve();
    return 0;
}