Pagini recente » Cod sursa (job #2398341) | Cod sursa (job #1607431) | Cod sursa (job #2549429) | Cod sursa (job #1859311) | Cod sursa (job #2042217)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,i,x,A[100001],m,op,a,b;
int query(int p)
{
int r = 0;
for (; p; p-=(p&-p))
r += A[p];
return r;
}
void update(int p, int x)
{
for (; p<=n; p+=(p&-p))
A[p] += x;
}
int main()
{
fin >> n >> m;
for (i=1; i<=n; i++)
{
fin >> x;
update(i, x);
}
for (i=1; i<=m; i++)
{
fin >> op;
if (op == 0)
{
fin >> a >> b;
update(a, b);
}
if (op == 1)
{
fin >> a >> b;
fout << query(b)-query(a-1) << "\n";
}
if (op == 2)
{
fin >> a;
int st = 1;
int dr = n;
while (st <= dr)
{
int mid = (st+dr)/2;
int rez = query(mid);
if (rez < a)
st = mid+1;
else
dr = mid-1;
}
if (query(st) == a)
fout << st << "\n";
else
fout << -1 << "\n";
}
}
return 0;
}