Pagini recente » Cod sursa (job #150893) | Cod sursa (job #2322204) | Cod sursa (job #2971676) | Cod sursa (job #1300277) | Cod sursa (job #2285204)
#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;
}