Cod sursa(job #3341475)

Utilizator Alexia12345Maftei Alexia Alexia12345 Data 19 februarie 2026 17:47:31
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <iostream>
#define NMAX 60002
using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int arbint[NMAX],n,q;

void update(int val, int poz, int nod, int st, int dr)
{
	if(st==dr)
	{
		if(st==poz)
			arbint[nod]=arbint[nod]+val;
		return;
	}
	else
	{
		if(poz<=(st+dr)/2 && st<=poz)
			update(val,poz,2*nod,st,(st+dr)/2);
		if(poz>=(st+dr)/2+1 && dr>=poz)
			update(val,poz,2*nod+1,(st+dr)/2+1,dr);
		arbint[nod]=arbint[nod*2]+arbint[nod*2+1];
	}
}
int query(int si, int fi, int nod, int st, int dr)
{
	if(si<=st && dr<=fi)
		return arbint[nod];
	if(fi<=(st+dr)/2)
		return query(si,fi,2*nod,st,(st+dr)/2);
	if(si>(st+dr)/2)
		return query(si,fi,2*nod+1,(st+dr)/2+1,dr);

	return query(si,fi,2*nod,st,(st+dr)/2)+query(si,fi,2*nod+1,(st+dr)/2+1,dr);
}

int main()
{
	fin>>n>>q;

	for(int i=1; i<=n; ++i)
	{
		int x;
		fin>>x;
		update(x,i,1,1,n);
	}
	//for(int i=1;i<=2*n;++i)
	    //fout<<arbint[i]<<" ";
	//return 0;
	while(q--)
	{
		int cer,a,b;
		fin>>cer>>a>>b;
		//cerr<<a<<" "<<b<<endl;
		if(cer==1)
			fout<<query(a,b,1,1,n)<<endl;
		else
			update((-1)*b,a,1,1,n);

	}
}