Cod sursa(job #653120)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 27 decembrie 2011 14:04:23
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<iostream>
#include<fstream>
using namespace std;
int v[30001],poz,x,a,b,c;
long s;
void update(int nod, int st, int dr)
{
	int mij;
	if(st==dr) {
		v[nod]=v[nod]+x*c;
		return;
	}
	else {
		mij=(st+dr)/2;
		if(poz<=mij)
			update(nod*2,st,mij);
		else update(nod*2+1,mij+1,dr);
	}
	v[nod]=v[nod*2]+v[nod*2+1];
}
void interogare(int nod, int st, int dr)
{
	int mij;
	if((a<=st)&&(dr<=b)) {
		s=s+v[nod];
		return;
	}
	mij=(st+dr)/2;
	if(a<=mij)
		interogare(nod*2,st,mij);
	if(mij<b)
		interogare(nod*2+1,mij+1,dr);
}
int main ()
{
	int n,i,m,p;
	ifstream f("datorii.in");
	ofstream g("datorii.out");
	f>>n>>m;
	c=1;
	for(i=1;i<=n;i++) {
		f>>x;
		poz=i;
		update(1,1,n);
	}
	c=-1;
	for(i=1;i<=m;i++) {
		f>>p>>poz>>x;
		if(p==0) 
			update(1,1,n);
		else {
			a=poz;
			b=x;
			interogare(1,1,n);
			g<<s<<'\n';
			s=0;
		}
	}
	f.close();
	g.close();
	return 0;
}