Pagini recente » Cod sursa (job #2172925) | Cod sursa (job #2706187) | Cod sursa (job #3296832) | Cod sursa (job #781270) | Cod sursa (job #3354314)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n, m;
int A[100000] = {0};
void update(int p, int val){
for(int i = p;i <= n;i += (i&-i)){
A[i] += val;
}
}
int suma_interval(int p){
int suma = 0;
for (int i = p; i > 0; i-=(i&-i))
suma += A[i];
return suma;
}
int main(){
fin >> n >> m;
for(int i = 1;i <= n; ++i){
int nr;
fin >> nr;
update(i,nr);
}
for(int i = 1;i <= m; ++i){
int q,a,b;
fin >> q;
if(!q){
fin >> a >> b;
update(a,b);
}
else if(q == 1){
fin >> a >> b;
fout << suma_interval(b) - suma_interval(a-1);
fout << "\n";
}
else{
fin >> a;
int low = 1, high = n,k = -1, mid;
while(low <= high){
mid = (low + high)/2;
if(suma_interval(mid) == a){
k = mid;
break;
}
else if(suma_interval(mid) > a){
high = mid - 1;
}
else
low = mid + 1;
}
fout << k << "\n";
}
}
return 0;
}