Cod sursa(job #975445)

Utilizator andrettiAndretti Naiden andretti Data 20 iulie 2013 12:08:14
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<stdio.h>
#define maxn 15005
using namespace std;

int n,m;
int v[maxn],aib[maxn];

void update(int k,int val)
{
    int i=0;
    while(k<=n)
    {
        aib[k]-=val;
        while( ((k>>i)&1)==0 ) i++;
        k+=(1<<i);
        i++;
    }
}

int query(int k)
{
    int sum=0,i=0;
    while(k>0)
    {
        sum+=aib[k];
        while( ((k>>i)&1)==0 ) i++;
        k-=(1<<i);
        i++;
    }
    return sum;
}

void read()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) {scanf("%d",&v[i]); update(i,-v[i]);}
}

void solve()
{
    int type,a,b;
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&type,&a,&b);
        if(type==0) update(a,b);
        else printf("%d\n",query(b)-query(a-1));
    }
}

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);

    read();
    solve();

    fclose(stdin);
    fclose(stdout);
    return 0;
}