Cod sursa(job #1202975)

Utilizator ionutpop118Pop Ioan Cristian ionutpop118 Data 30 iunie 2014 12:56:48
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
using namespace std;
int n,m;
int aib[15005];
void upgrade(int poz,int val)
{
    for (;poz<=n;poz+=(poz&-poz))
        aib[poz]+=val;
}
void downgrade(int poz,int val)
{
    for (;poz<=n;poz+=(poz&-poz))
        aib[poz]-=val;
}
int query(int poz)
{
    int s=0;
    for (;poz>0;poz-=(poz&-poz))
        s+=aib[poz];
    return s;
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    bool tip;
    int x,y;
    scanf("%d%d",&n,&m);
    for (register int i=1;i<=n;++i)
    {
        scanf("%d",&x);
        upgrade(i,x);
    }
    for (register int i=1;i<=m;++i)
    {
        scanf("%d%d%d",&tip,&x,&y);
        if (tip==1)
            printf("%d\n",query(y)-query(x-1));
        else
            downgrade(x,y);
    }
    return 0;
}