Cod sursa(job #1638848)

Utilizator TrascaAndreiTrasca Andrei TrascaAndrei Data 8 martie 2016 09:38:43
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <stdio.h>
#define zeros(x) (x&(-x))

using namespace std;

const int N = 15001;
int aib[N],n,m;

void update(int i,int val)
{
    for(i;i<=n;i+=zeros(i))
        aib[i]-=val;
}

void creare(int i,int val)
{
    for(i;i<=n;i+=zeros(i))
        aib[i]+=val;
}

int querry(int i)
{
    int s=0;
    for(i;i>0;i-=zeros(i))
        s+=aib[i];
    return s;
}

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