Pagini recente » Cod sursa (job #2153796) | Cod sursa (job #1141624) | Cod sursa (job #244700) | Cod sursa (job #152182) | Cod sursa (job #2396812)
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int AIB[100001], n, m;
inline int zeros(int x)
{
return x & (-x);
}
inline void add(int poz, int c)
{
for (int i = poz; i <= n; i += zeros(i))
AIB[i] += c;
}
inline int compute(int poz)
{
int rez = 0;
for (int i = poz; i > 0; i -= zeros(i))
rez += AIB[i];
return rez;
}
inline int sum(int x)
{
int lg = 1, i;
for (lg; lg <= n; lg <<= 1)
{
for (i = 1; lg; lg >>= 1)
{
if (i + lg <= n && compute(i + lg) <= x)
i += lg;
}
}
if (compute(i) != x)
return -1;
return i;
}
int main()
{
int c, a, b;
in >> n >> m;
for (int i = 1; i <= n; ++i)
{
in >> c;
add(i, c);
}
for (int q = 1; q <= m; ++q)
{
in >> c;
if (c != 2)
{
in >> a >> b;
if (c == 0)
add(a, b);
else if (c == 1)
out << compute(b) - compute(a - 1) << '\n';
}
else
{
in >> a;
int i = 1;
while (compute(i) < a)
++i;
out << i << '\n';
}
}
return 0;
}