Pagini recente » Cod sursa (job #2867047) | Cod sursa (job #56964) | Cod sursa (job #1344808) | Cod sursa (job #1718055) | Cod sursa (job #2227658)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
const int N = 1e5 + 7;
int n;
int a[N];
void update(int poz, int val)
{
for(int i = poz; i <= n; i += i & (-i))
a[i] += val;
}
int sum(int x)
{
int sum = 0;
for(int i = x; i >= 1; i -= i & (-i))
sum += a[i];
return sum;
}
int bs(int x)
{
int st = 1;
int dr = n;
while(st <= dr)
{
int mid;
mid = (st + dr) / 2;
if(sum(mid) == x)
return mid;
if(sum(mid) < x)
st = mid + 1;
else
dr = mid - 1;
}
return -1;
}
int main()
{
int q;
in >> n >> q;
for(int i = 1; i <= n; i++)
{
int x;
in >> x;
update(i, x);
}
while(q--)
{
int cerinta;
in >> cerinta;
int a, b;
switch(cerinta)
{
case(0) : in >> a >> b; update(a, b); break;
case(1) : in >> a >> b; out << sum(b) - sum(a - 1) << '\n'; break;
case(2) : in >> a; out << bs(a) << '\n';
}
}
}