Cod sursa(job #852985)

Utilizator mariacMaria Constantin mariac Data 11 ianuarie 2013 23:05:43
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#include<math.h>
using namespace std;

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

int a[15001],b[130],n,bat,rad;

void act(int ziua,int val)
{
	ziua--;
	a[ziua]-=val;
	b[ziua/rad]-=val;
}

void inter(int z1,int z2)
{	
	int suma=0,i;
	z1--;
	z2--;
	int b1,b2;
	b1=z1/rad;
	b2=z2/rad;
	if(b1==b2)for(i=z1;i<=z2;i++)
				  suma+=a[i];
		else
		{
			int x;
			x=(b1+1)*rad;
			for(i=z1;i<x;i++)
				suma+=a[i];
			for(i=b1+1;i<b2;i++)
				suma+=b[i];
			x=b2*rad;
			for(i=x;i<=z2;i++)
				suma+=a[i];
		}
			

	fout<<suma<<"\n";
}
int main()
{
	int m,i;
	double k;
	fin>>n>>m;
	
	for(i=0;i<n;i++)
		fin>>a[i];
	k=n;
	k=sqrt(k);
	rad=(int)k;
	bat=-1;
	for(i=0;i<n;i++)
		{	
			if(i%rad==0)++bat;
			b[bat]+=a[i];
		}
			
	
	for(i=1;i<=m;i++)
	{
		int x,y,o;
		
		fin>>o>>x>>y;
		
		if(o==0)act(x,y);
			else inter(x,y);
	}
	
	return 0;
}