Cod sursa(job #2481483)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 26 octombrie 2019 23:10:55
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#define zero(pos) ((pos^(pos-1))&pos)
using namespace std;

const int NMAX = 30005;

int n , q;
int aib[NMAX];

inline void add(int pos,int val)
{
    for(int i = pos ; i <= n ; i += zero(i))
        aib[i] += val;
}

inline void scade(int pos,int val)
{
    for(int i = pos ; i <= n ; i += zero(i))
        aib[i] -= val;
}
inline int sum(int pos)
{
    int ans = 0;
    int i = pos;
    while(i > 0)
    {
        ans += aib[i];
        i -= zero(i);
    }
    return ans;
}

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