Pagini recente » Cod sursa (job #949755) | Cod sursa (job #3288520) | Cod sursa (job #3342311) | Cod sursa (job #2526103) | Cod sursa (job #2019131)
#include <bits/stdc++.h>
using namespace std;
ifstream F("aib.in");
ofstream G("aib.out");
int n, aib[100005], a, b, x, q;
void upd(int pos, int x)
{
while(pos <= n)
{
aib[pos] += x;
pos += pos & (-pos);
}
}
int query(int pos)
{
int sum = 0;
while(pos > 0)
{
sum += aib[pos];
pos -= pos & (-pos);
}
return sum;
}
int Find(int a)
{
int l = 1, r = n, mid, aux;
while(l <= r)
{
mid = (l+r) >> 1;
aux = query(mid);
if(aux == a) return mid;
if(aux < a) l = mid+1;
else r = mid-1;
}
return -1;
}
int main()
{
F >> n >> q;
for(int i = 1; i <= n; ++ i) F >> x, upd(i, x);
while(q--)
{
F >> x;
if(!x) F >> a >> b, upd(a, b);
else if(x == 1) F >> a >> b, G << query(b) - query(a-1) << '\n';
else F >> a, G << Find(a) << '\n';
}
return 0;
}