Pagini recente » Cod sursa (job #1707771) | Cod sursa (job #803947) | Cod sursa (job #159811) | Cod sursa (job #1675774) | Cod sursa (job #2670559)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int nMax = 100005;
int n, m;
int aib[nMax];
void update(int poz, int val){
for(; poz <= n; poz += poz & -poz)
aib[poz] += val;
}
int query(int poz){
int ans = 0;
for(; poz > 0; poz -= poz & -poz)
ans += aib[poz];
return ans;
}
int bs(int val){
int idx = 0, interv;
for(interv = 1; interv <= n; interv *= 2);
for(; interv > 0; interv /= 2)
if(idx + interv <= n)
if(aib[idx + interv] <= val){
idx += interv;
val -= aib[idx];
if(val == 0)
return idx;
}
return -1;
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i++){
int x;
fin >> x;
update(i, x);
}
for(int i = 1; i <= m; i++){
int op, a, b;
if(op <= 1)
fin >> a >> b;
else
fin >> a;
if(!op)
update(a, b);
else if(op == 1)
fout << query(b) - query(a - 1) << "\n";
else
fout << bs(a) << "\n";
}
return 0;
}