Cod sursa(job #2201175)

Utilizator shantih1Alex S Hill shantih1 Data 3 mai 2018 20:10:54
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <fstream>

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

int nrd,n,m,i,j,nr,sun[120000],v[15005],a,b,x,o;

void update(int nr,int st,int dr)
{
	if(st==dr)	
	{	sun[nr]-=a;	return;	}
	
	int md=(dr+st)/2;
	if(b<=md)	update(nr*2,st,md);
	else		update(nr*2+1,md+1,dr);
	
	sun[nr]=sun[nr*2]+sun[nr*2+1];
}

int query(int nr,int st,int dr)
{
	if(st>=a&&dr<=b)	return sun[nr];
	
	int md=(st+dr)/2,s=0;
	if(max(a,st)<=min(b,md))	s+=query(2*nr,st,md);
	if(max(a,md+1)<=min(b,dr))	s+=query(2*nr+1,md+1,dr);
	return s;
}

int main() {
	
	fin>>n>>m;
	for(i=1;i<=n;i++)
	{
		fin>>a;
		a*=-1;
		b=i;
		update(1,1,n);
	}
	for(i=1;i<=m;i++)
	{
		fin>>o>>a>>b;
		if(o==1)	fout<<query(1,1,n)<<"\n";
		if(o==0)	
		{
			x=a;	a=b;	b=x;
			update(1,1,n);
		}
	}
}