Pagini recente » Cod sursa (job #1225889) | Cod sursa (job #1983658) | Cod sursa (job #1453234) | Cod sursa (job #2778995) | Cod sursa (job #3159757)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int aib[100001], n, m, ce,a,b;
void update(int p, int x)
{
for (int i = p; i <= n; i += (i & -i))
aib[i] += x;
}
int query(int p)
{
int s = 0;
for (int i = p; i >= 1; i -= (i & -i))
s += aib[i];
return s;
}
int cb(int k)
{
int poz = -1, st = 1, dr = n,mid,aux;
while (st <= dr)
{
mid = (st + dr) / 2;
aux = query(mid);
if (aux == k)
{
poz = mid;
dr = mid - 1;
}
else
if (aux > k)
dr = mid - 1;
else
st = mid + 1;
}
return poz;
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> a;
update(i, a);
}
for (int i = 1; i <= m; i++)
{
cin >> ce;
if (ce == 0)
{
cin >> a >> b;
update(a, b);
}
else
if (ce == 1)
{
cin >> a >> b;
cout << query(b) - query(a - 1) << '\n';
}
else
if (ce == 2)
{
cin >> a;
cout << cb(a) << '\n';
}
}
return 0;
}