Pagini recente » Cod sursa (job #2530404) | Cod sursa (job #1717107) | Cod sursa (job #3221861) | Cod sursa (job #521810) | Cod sursa (job #2343130)
#include <bits/stdc++.h>
#define lastBit(x) (x & (-x))
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int MAX = 1e5 + 5;
int n, m;
int aib[MAX];
int Sum(int x)
{
int sum = 0;
for(; x; x -= lastBit(x))
sum += aib[x];
return sum;
}
int Sum(int a, int b)
{
return Sum(b) - (a == 1 ? 0 : Sum(a - 1));
}
void Update(int idx, int value)
{
for(; idx <= n; idx += lastBit(idx))
aib[idx] += value;
}
int Binary_Search(int val)
{
int j, pas;
for(pas = 1; pas < n; pas <<= 1);
for(j = 0; pas; pas >>= 1)
{
if(j + pas <= n && aib[j + pas] <= val)
{
j += pas;
val -= aib[j];
if(val == 0)
return j;
}
}
return -1;
}
void Solve()
{
int op, a, b;
while(m--)
{
f >> op;
switch(op)
{
case 0: f >> a >> b; Update(a, b); break;
case 1: f >> a >> b; g << Sum(a, b) << "\n"; break;
case 2: f >> a; g << Binary_Search(a) << "\n"; break;
}
}
}
int main()
{
f >> n >> m;
int x;
for(int i = 1; i <= n; ++i)
{
f >> x;
Update(i, x);
}
Solve();
return 0;
}