Cod sursa(job #1807522)

Utilizator avramraresAvram Rares Stefan avramrares Data 16 noiembrie 2016 17:57:14
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#define UB(x) x&(-x)
using namespace std;
int i,j,N,m,n,w,a,b,cerinta;
int AIB[15006];
int suma(int poz, int val) {
    for(int i = poz; i <= n; i += UB(i))
        AIB[i] += val;
    return 0;
}
int suma1(int poz, int val) {
    for(int i = poz; i <= n; i += UB(i))
        AIB[i] -= val;
    return 0;
}
int query(int poz)
{
    int sumin = 0;
    for(int i = poz; i >= 1; i -= UB(i))
        sumin += AIB[i];
    return sumin;
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&w); suma(i,w);
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d",&cerinta);
        if(cerinta==0)
        {
            scanf("%d %d",&a,&b);
            suma1(a,b);
        }
        else if(cerinta==1)
        {
            scanf("%d %d",&a,&b);
            printf("%d \n",query(b)-query(a-1));
        }
    }
    return 0;
}