Cod sursa(job #851961)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 10 ianuarie 2013 17:54:11
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#include<cmath>
#define Nmax 15010

int N,M,i,SqrtN,V[Nmax],B[150];

int main() {
	
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	
	
	scanf("%d %d",&N,&M);
	
	SqrtN = (int)sqrt(N) ;
	if( SqrtN != sqrt(N) ) SqrtN++ ; 
	
	for( i = 0 ; i < N ; i++ ) { 
		scanf("%d",&V[i] ) ;
		B[ i / SqrtN ] += V[i] ;
	}
	
	for( i = 1 ; i <= M ; i++ ) {
		
		int op,p1,p2;
		
		scanf("%d %d %d",&op,&p1,&p2) ; 
		
		if( op ) {
			
			p1-- ; p2-- ;
			
			int b1 = p1/ SqrtN ; 
			int b2 = p2/ SqrtN ; 
			
			int sol = 0, j = 0 ;
			for( j = p1 ; j < (b1+1) * SqrtN ; j++ ) sol += V[j] ; 
			for( j = b1+1 ; j < b2 ; j++ ) sol += B[j] ;
			for( j = b2 * SqrtN  ; j <= p2 ; j++ ) sol += V[j] ;
			
			printf("%d\n",sol);
		}
		else
		{
			p1--;
			int b = p1/SqrtN;
			V[p1] -= p2 ; 
			B[b] -= p2 ;
		}
	}
	
	return 0 ; 
}