Cod sursa(job #2835099)

Utilizator Super_VictorVictor Caciulan Super_Victor Data 18 ianuarie 2022 02:47:57
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>

using namespace std;
int aint[500005], n, p=1;
void up(int i, int val)
{
    int poz=p-1+i;
    aint[poz]=aint[poz]-val;
    while(poz>1)
    {
        poz/=2;
        aint[poz]=aint[poz*2]+aint[poz*2+1];
    }
}
int query(int ind, int csta, int cdra, int cstq, int cdrq)
{
    if(cstq<=csta && cdra<=cdrq)
        return aint[ind];
    else
    {
        int aux=0;
        if(cstq<=((csta+cdra)/2))
            aux+=query(ind*2, csta, (csta+cdra)/2, cstq, cdrq );
        if(cdrq>((csta+cdra)/2))
            aux+=query(ind*2+1, (csta+cdra)/2+1, cdra, cstq, cdrq );
        return aux;
    }
}
int main()
{
    ifstream cin ("datorii.in");
    ofstream cout ("datorii.out");
    int m, c, a, b, aux, t;
	cin>>n>>m;
	p=1;
	while(p<n)
    {
        p=p*2;
    }
	for(int i=p; i<=p+n-1; i++)
	{
		cin>>aint[i];
	}
	for(int i=p+n; i<=p*2; i++)
	{
		aint[i]=0;
	}
	for(int i=p-1; i>=1; i--)
	{
		aint[i]=aint[i*2]+aint[i*2+1];
	}
	for(int i=0; i<m; i++)
	{
		cin>>c>>a>>b;
		if(c==1) cout<<query(1, 1, p, a, b)<<'\n';
		else up(a, b);
	}
    return 0;
}