Pagini recente » Cod sursa (job #171587) | Statistici Ilinca Andrei Alexandru (Ilinca_Andrei) | Cod sursa (job #1175590) | Cod sursa (job #824045) | Cod sursa (job #2190942)
#include <fstream>
using namespace std;
int BIT[100010];
ifstream f("aib.in");
ofstream g("aib.out");
int getSum(int index)
{
int sum = 0;
index = index + 1;
while(index)
{
sum += BIT[index];
index -= index &(-index);
}
return sum;
}
void update(int index, int val, int n)
{
index = index + 1;
while(index <= n)
{
BIT[index] += val;
index += index & (-index);
}
}
int caut_bin(int s, int d, int value)
{
int mij, val;
if(s > d)
return -1;
mij = (s+d)/2;
val = getSum(mij-1);
if(value == val)
return mij;
else
{
if(value < val)
return caut_bin(s, mij-1, value);
else
return caut_bin(mij+1, d, value);
}
}
int main()
{
int n, i, m, val, c, a, b, ok, j;
f >> n >> m;
for(i = 0; i < n; i++)
{
f >> val;
update(i, val, n);
}
for(i = 0 ; i < m; i++)
{
f >> c;
if(c == 0)
{
f >> a >> b;
update(a-1, b, n);
}
if(c == 1)
{
f >> a >> b;
g << (getSum(b-1) - getSum(a-2)) << '\n';
}
if(c == 2)
{
f >> a;
ok = caut_bin(1, n, a);
g << ok << '\n';
}
}
}