Pagini recente » Cod sursa (job #2406443) | Cod sursa (job #2429939) | Cod sursa (job #1663914) | Rating Albu Flaviu Bogdan (flaviu.albu) | Cod sursa (job #3213087)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int N_MAX = 100001;
int n, m;
int aib[N_MAX];
inline int ub(int x){
return (x & (-x));
}
void add(int poz, int &val){
for(; poz <= n; poz += ub(poz))
aib[poz] += val;
}
int sum(int poz){
int _sum = 0;
for(; poz > 0; poz -= ub(poz))
_sum += aib[poz];
return _sum;
}
int binSearch(int st, int dr, int &a){
if(st > dr)
return -1;
int m = (st + dr) >> 1;
int s = sum(m);
if(s >= a){
if(s == a)
return m;
return binSearch(st, m-1, a);
}else
return binSearch(m + 1, dr, a);
}
int main()
{
f >> n >> m;
for(int i = 1, x; i <= n; ++i){
f >> x;
add(i, x);
}
int c, a, b;
while(m--){
f >> c;
switch(c){
case 0:
f >> a >> b;
add(a, b);
break;
case 1:
f >> a >> b;
g << sum(b) - sum(a - 1) << '\n';
break;
case 2:
f >> a;
g << binSearch(1, n, a) << '\n';
break;
}
}
return 0;
}