Pagini recente » Cod sursa (job #2341555) | Cod sursa (job #793109) | Cod sursa (job #3275567) | Cod sursa (job #2749467) | Cod sursa (job #3261783)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX = 1e5 + 1;
int n, m, a;
int aib[NMAX];
int ub(int x)
{
return x & (-x);
}
void add(int x, int val)
{
for (int i = x; i <= n; i += ub(i))
aib[i] += val;
}
int sum(int x)
{
int sum = 0;
for (int i = x; i; i -= ub(i))
sum += aib[i];
return sum;
}
int binary_search(int s)
{
int st = 1, dr = n;
while (st <= dr)
{
int mij = (st + dr) / 2;
int crt_sum = sum(mij);
if (crt_sum == s)
return mij;
if (crt_sum < s)
st = mij + 1;
else
dr = mij - 1;
}
return -1;
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; ++i)
{
fin >> a;
add(i, a);
}
int q, x;
while (m--)
{
fin >> q;
if (q == 0)
{
fin >> x >> a;
add(x, a);
}
else if (q == 1)
{
fin >> x >> a;
fout << sum(a) - sum(x - 1) << '\n';
}
else
{
fin >> a;
fout << binary_search(a) << '\n';
}
}
return 0;
}