Pagini recente » Cod sursa (job #2346582) | Cod sursa (job #3272503) | Cod sursa (job #1828904) | Cod sursa (job #1655395) | Cod sursa (job #2042211)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,i,v[100001],A[400004],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 >> v[i];
update(i, v[i]);
}
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;
}