Pagini recente » Cod sursa (job #1466602) | Cod sursa (job #3185382) | Cod sursa (job #2232957) | Cod sursa (job #1425462) | Cod sursa (job #2195016)
#include <bits/stdc++.h>
#define ub(x) (x&(-x))
using namespace std;
ifstream f ("aib.in");
ofstream g ("aib.out");
int n,m,aib[100002],st,dr,i,x,cer,a,b,poz,mij;
void update (int poz, int val)
{
for (int i = poz; i <= n; i += ub(i))
aib[i] += val;
}
int suma (int poz)
{
int S = 0;
for (int i = poz; i > 0; i -= ub(i))
S = S + aib[i];
return S;
}
int main()
{
f >> n >> m;
for (i = 1; i <= n; i++)
{
f >> x;
update(i,x);
}
for (i = 1; i <= m; i++)
{
f >> cer;
if (cer == 0)
{
f >> a >> b;
update(a,b);
}
else if (cer == 1)
{
f >> a >> b;
g << suma(b) - suma(a-1) << '\n';
}
else
{
f >> a;
st = 1;
dr = n;
poz = -1;
while (st <= dr && poz == -1)
{
mij = (st + dr) / 2;
if (suma(mij) > a)
{
dr = mij - 1;
}
else if (suma(mij) < a)
{
st = mij + 1;
}
else
{
poz = mij;
break;
}
}
g << poz << '\n';
}
}
return 0;
}