Cod sursa(job #852346)

Utilizator danieladDianu Daniela danielad Data 11 ianuarie 2013 02:42:01
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
int main(){
	long n,m,a[15001],b[15001],s=0;
	int nr=1,i;
	ifstream f("datorii.in");
	ofstream g("datorii.out");
	f>>n>>m;
	int op, st, dr;
	long sqr=sqrtl(n);
	for(i=1;i<=n;i++){
		f>>a[i];
		if(nr<=sqr){
			s=s+a[i];
			if( i%sqr==0 && i>=sqr){
				b[nr]=s;
				nr++;
				s=0;
			}
		}
	}
	for(int j=1;j<=m;j++){
		f>>op>>st>>dr;
		if(op==1){
			long sum=0;
			int l,r;
			if(st%sqr==0)
				l=st/sqr;
			else
				l=st/sqr+1;
			if(dr<=sqr*(nr-1)){
				if(dr%sqr==0)
					r=dr/sqr;
				else
					r=dr/sqr+1;
			}
			else
				r=nr-1;
			for(i=l;i<=r;i++)
				sum=sum+b[i];
			if(dr>sqr*(nr-1))
				for(i=sqr*(nr-1)+1;i<=n;i++)
					sum=sum+a[i];
			for(i=st-1;i>(l-1)*sqr;i--)
				sum=sum-a[i];
			for(i=dr+1;i<=r*sqr;i++)
				sum=sum-a[i];
			g<<sum<<'\n';
		}
		if(op==0){
			a[st]=a[st]-dr;
			int t;
			if(st<=sqr*(nr-1)){
				if(st%sqr==0)
					t=st/sqr;
				else
					t=st/sqr+1;
			b[t]=b[t]-dr;
			}
		}
	}
	
	return 0;
}