Pagini recente » Cod sursa (job #2304842) | Cod sursa (job #2288129) | Cod sursa (job #2198747) | Cod sursa (job #1183295) | Cod sursa (job #3247141)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n, m, aib[100005];
void update(int i, int x)
{
while (i <= n)
{
aib[i] += x;
i += i & -i;
}
}
int sp(int i)
{
int r = 0;
while (i > 0)
{
r += aib[i];
i -= i & -i;
}
return r;
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
update(i, x);
}
for (int i = 0; i < m; i++)
{
int c, a, b;
cin >> c;
if (c == 0)
{
cin >> a >> b;
update(a, b);
}
else if (c == 1)
{
cin >> a >> b;
cout << sp(b) - sp(a-1) << "\n";
}
else if (c == 2)
{
cin >> a;
int st = 1, dr = n;
while (st < dr)
{
int mij = (st + dr)/2;
if (sp(mij) < a)
{
st = mij+1;
}
else if (sp(mij) > a)
{
dr = mij-1;
}
else
{
dr = mij;
}
}
if (sp(st) != a)
{
cout << -1 << "\n";
}
else
{
cout << st << "\n";
}
}
}
return 0;
}