Pagini recente » Cod sursa (job #633510) | Cod sursa (job #1338952) | Cod sursa (job #1638303) | Cod sursa (job #2530593) | Cod sursa (job #3261274)
#include <bits/stdc++.h>
using namespace std;
ifstream fcin("aib.in");
ofstream fcout("aib.out");
const int N = 1e5 + 5;
int aib[N], n, m;
void Update(int poz, int x)
{
while (poz <= n)
{
aib[poz] += x;
poz += (poz & -poz);
}
}
int Query(int poz)
{
int suma = 0;
while (poz > 0)
{
suma +=aib[poz];
poz -= (poz & -poz);
}
return suma;
}
int cb(int x)
{
int st, dr, m, p;
st = 1;
dr = n;
p = -1;
while (st <= dr)
{
m = (st + dr) / 2;
int r = Query(m);
if (r == x)
{
p = m;
dr = m - 1;
}
else if (r < x)
st = m + 1;
else
dr = m - 1;
}
return p;
}
int main()
{
int x, tip, a, b;
fcin >> n >> m;
for (int i = 1; i <= n; i++)
{
fcin >> x;
Update(i, x);
}
while (m--)
{
fcin >> tip;
if (tip == 0)
{
fcin >> a >> b;
Update(a, b);
}
else if (tip == 1)
{
fcin >> a >> b;
int r = Query(b) - Query(a - 1);
fcout << r << '\n';
}
else
{
fcin >> a;
fcout << cb(a) << '\n';
}
}
return 0;
}