Cod sursa(job #2009817)

Utilizator JasminaCornesteanJasmina Cornestean JasminaCornestean Data 10 august 2017 22:10:38
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
using namespace std;

ifstream fi("datorii.in");
ofstream fo("datorii.out");

int n,m,i,A[15001],x,y;
int AIB[15001];
long long rez;
bool type;

void update(int p, int v)
// A[x]-=v
{
	while (p<=n)
	{
		AIB[p]-=v;
		p=p+(p&(-p));
	}
}

void updatef(int p, int v)
// A[x]+=v
{
	while (p<=n)
	{
		AIB[p]+=v;
		p=p+(p&(-p));
	}
}

long long f(int p)
// returneaza suma A[1]+A[2]+...+A[p]
{
	long long s;
	s=0;
	while (p>=1)
	{
		s=s+AIB[p];
		p=p-(p&(-p));
	}
	return s;
}

int query(int st, int dr)
// returneaza A[st]+...+A[dr]
{
	return f(dr)-f(st-1);
}

int main()
{
    fi>>n>>m;
    for( i=1; i<=n; i++)
    {
         fi>>A[i];
         updatef(i,A[i]);
    }
    for( i=1; i<=m; i++)
    {
         fi>>type>>x>>y;
            if( type==0)
               update(x,y);
         else
           fo<<query(x,y)<<'\n';
    }
   	fi.close();
	  fo.close();
    return 0;
}