Cod sursa(job #2285204)

Utilizator cezar.plescaCezar Plesca cezar.plesca Data 18 noiembrie 2018 12:05:51
Problema Arbori indexati binar Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>

#include<iostream>
#include<fstream>

using namespace std;

#define MAXN 100000

int N,M;
int S[MAXN+1];
int suma;

int findmink(){
	int left=1,right=N;
	int mid;
	while(left <= right){
		mid=(left+right)/2;
		if(suma==S[mid])
			return mid;
		if(suma<S[mid]){
			right=mid-1;
		}
		else{
			left=mid+1;
		}
	}
	return -1;
}

int main(){
	
	freopen("aib.in", "r", stdin);
	freopen("aib.out", "w", stdout);

	scanf("%d %d", &N,&M);

	int v;
	for(int i=0;i<N;i++){
		scanf("%d", &v);
		S[i+1]=S[i]+v;
	}

	int a,b,tip,rez;
	for(int i=0;i<M;i++){
		scanf("%d",&tip);
		switch(tip){
			case 0:
				// adunare valoare
				scanf("%d %d",&a,&b);
				for(int j=a;j<=N;j++)
					S[j]+=b;
				break;
			case 1:
				// interogare suma
				scanf("%d %d",&a,&b);
				suma=S[b]-S[a-1]; 
				printf("%d\n",suma);
				break;
			case 2:
				// minimum k
				scanf("%d",&suma);
				rez=findmink();
				printf("%d\n",rez);
				break;
		}
	}

	return 0;
}