Pagini recente » Cod sursa (job #1880697) | Cod sursa (job #1073287) | Cod sursa (job #3039796) | Cod sursa (job #1467888) | Cod sursa (job #3161146)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m;
int a[100005];
int v[100005];
int query(int poz)
{
int suma = 0;
for (int i = poz; i > 0; i -= (i & -i))
suma += a[i];
return suma;
}
void update(int a1, int b)
{
for (int i = a1; i <= n; i += (i & -i))
{
a[i] += b;
}
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> v[i];
for (int i = 1; i <= n; i++)
{
update(i, v[i]);
}
for (int i = 1; i <= m; i++)
{
int op, x, y;
fin >> op;
if (op == 0)
{
fin >> x >> y;
update(x, y);
}
else if (op == 1)
{
fin >> x >> y;
fout << query(y) - query(x - 1) << '\n';
}
else
{
int k;
fin >> k;
x = 1, y = n;
bool da=false;
while (x <= y && !da)
{
int mij = (x + y) / 2;
int suma = query(mij);
if (k == suma)
{
fout << mij<<'\n';
da=true;
}
else if (k > suma)
x = mij + 1;
else
y = mij - 1;
}
if(!da)
fout<<-1<<'\n';
}
}
}