Cod sursa(job #1359400)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 24 februarie 2015 22:25:19
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
# include <cstdio>
# define ub(x) (x&(-x))

using namespace std;

int n,m,x,y,OP;
int aib[15005];

inline void update(int x,int poz)
{
    int i;


    for (i = poz; i <= n; i += ub(i))
        aib[i] += x;


}

inline void down(int x, int poz)
{
    int i;
    for (i = poz; i <= n; i += ub(i)) aib[i] -= x;
}


inline int suma (int x)
{
    int i, sum = 0;
    for (i = x; i > 0; i -= ub(i)) sum += aib[i];

    return sum;
}


int main ()

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

    scanf("%d%d",&n,&m);

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

    for (int i = 1; i <= m; i++)
    {
        scanf("%d",&OP);
        if (OP == 0)
        {
            scanf("%d%d",&x,&y);
            down(y,x);
        }
        if (OP == 1)
        {
            scanf("%d%d",&x,&y);
            printf("%d\n",suma(y) - suma(x-1));
        }
    }

    return 0;
}