Pagini recente » Cod sursa (job #2932435) | Cod sursa (job #2612767) | Cod sursa (job #1376115) | Cod sursa (job #2457970) | Cod sursa (job #2904881)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int n,m;
int aib[100005];
void update(int p,int x)
{
for (int i = p; i <= n; i += (i & -i))
aib[i] += x;
}
int query(int p)
{
int sum = 0;
for (int i = p; i >= 1; i -= (i & -i))
sum += aib[i];
return sum;
}
int main()
{
in >> n >> m;
for (int i = 1; i <= n; i++)
{
int x;
in >> x;
update(i,x);
}
for (int i = 1; i <= m; i++)
{
int tip,x,y;
in >> tip;
if (tip == 0)
{
in >> x >> y;
update(x,y);
}
if (tip == 1)
{
in >> x >> y;
out << query(y) - query(x - 1) << '\n';
}
if (tip == 2)
{
in >> x;
int st = 0,pas = 1 << 16;
while (pas != 0)
{
if (st + pas <= n and query(st + pas) < x)
st += pas;
pas /= 2;
}
st++;
if (query(st) == x)
out << st << '\n';
else
out << "-1\n";
}
}
return 0;
}