Pagini recente » Cod sursa (job #1799162) | Rating Simader Albert (simaderal) | Cod sursa (job #1996964) | Cod sursa (job #1056520) | Cod sursa (job #2285181)
#include<stdio.h>
#include<iostream>
#include<fstream>
using namespace std;
#define MAXN 100000
int N,M;
int BT[MAXN+1];
int getSum(int index){
int sum = 0;
while(index>0) {
sum += BT[index];
index -= index & (-index);
}
return sum;
}
void updateBT(int index, int val) {
while (index <= N) {
BT[index] += val;
index += index & (-index);
}
}
int findmink(int suma){
int rez;
for(int i=1;i<=N;i++){
rez=getSum(i);
if(rez==suma)
return i;
if(rez>suma)
return -1;
}
return -1;
}
int main(){
freopen("aib.in", "r", stdin);
//freopen("arbint_test5.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);
updateBT(i+1,v);
}
int a,b,tip,sum,rez;
for(int i=0;i<M;i++){
scanf("%d",&tip);
switch(tip){
case 0:
// adunare valoare
scanf("%d %d",&a,&b);
updateBT(a,b);
break;
case 1:
// interogare suma
scanf("%d %d",&a,&b);
sum=getSum(b)-getSum(a-1);
printf("%d\n",sum);
break;
case 2:
// minimum k
scanf("%d",&a);
rez=findmink(a);
printf("%d\n",rez);
break;
}
}
return 0;
}