Pagini recente » Cod sursa (job #2940358) | Cod sursa (job #2161592) | Cod sursa (job #1535173) | Cod sursa (job #1035465) | Cod sursa (job #1914461)
#include <bits/stdc++.h>
#define zero(x) x&(-x)
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int NMax = 100002;
int n,m,x,p,a,b;
int AIB[NMax];
void update(int ind, int v){
for(int i = ind; i <= n; i += zero(i)){
AIB[i] += v;
}
}
int sum(int x){
int s = 0;
for(int i = x; i >= 1; i -= zero(i)){
s += AIB[i];
}
return s;
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; ++i){
f >> x;
update(i,x);
}
for(int i = 1; i <= m; ++i){
f >> p;
if(p == 0){
f >> a >> b;
update(a,b);
}
if(p == 1){
f >> a >> b;
g << sum(b) - sum(a - 1) << '\n';
}
if(p == 2){
f >> a;
int mid,lo = 1, hi = n,ok = 0;
while(lo <= hi){
mid = (lo + hi) / 2;
if(sum(mid) == a){
g << mid << '\n';
ok = 1;
break;
}else
if(sum(mid) < a)
lo = mid + 1;
else
if(sum(mid) > a)
hi = mid - 1;
}
if(ok == 0){
g << -1 << '\n';
}
}
}
return 0;
}