Cod sursa(job #1146634)

Utilizator kiralalaChitoraga Dumitru kiralala Data 19 martie 2014 10:17:25
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#define NMAX 15005
#define MMAX 100005
#define FOR(a,b,i) for(int (i)=(a);(i)<(b);++(i))

using namespace std;

FILE* f=freopen("datorii.in","r",stdin);
FILE* o=freopen("datorii.out","w",stdout);

int n,m;
int dat[NMAX];
inline int LowestBit(int p) { return ((p^(p-1))&p); }
void Update(int pos, int val)
{
    while(pos<=n)
    {
        dat[pos]+=val;
        pos+=LowestBit(pos);
    }
}

int GetSum(int p)
{
    int sum=0;
    while(p>=1)
    {
        sum+=dat[p];
        p-=LowestBit(p);
    }
    return sum;
}

int Query(int l, int r)
{
    int sum=0;
    sum=GetSum(r)-GetSum(l-1);
    return sum;
}

int main()
{
    scanf("%d%d",&n,&m);

    FOR(1,n+1,i)
    {
        int x;
        scanf("%d",&x);
        Update(i,x);
    }

    FOR(1,m+1,i)
    {
        int p;
        int a,b;
        scanf("%d",&p);
        scanf("%d%d",&a,&b);
        if(!p)
        {
            Update(a,-b);
        }
        else
        {
            printf("%d\n",Query(a,b));
        }
    }

    return 0;
}