Pagini recente » Cod sursa (job #1246079) | Cod sursa (job #827993) | Cod sursa (job #742830) | Cod sursa (job #2336282) | Cod sursa (job #2492170)
#include <bits/stdc++.h>
using namespace std;
int n;
int v[100001];
int aib[100001];
int query(int x){
int sum = 0,i;
for(i = x;i > 0;i -= i&(-i)){
sum += aib[i];
}
return sum;
}
void update(int x,int val){
int i;
for(i = x;i <= n;i += i&(-i)){
aib[i] += val;
}
}
int main()
{
ifstream cin("aib.in");
ofstream cout("aib.out");
int i,m;
cin >> n >> m;
for(i = 1;i <= n;i++){
cin >> v[i];
update(i,v[i]);
}
while(m--){
int tip,a,b;
cin >> tip >> a;
if(tip == 0){
cin >> b;
update(a,b);
}else if(tip == 1){
cin >> b;
cout << query(b) - query(a - 1) << "\n";
}else{
int r = 0,pas = 1 << 16;
while(pas){
if(r + pas <= n && query(r + pas) <= a)
r += pas;
pas /= 2;
}
cout << r << "\n";
}
}
return 0;
}