Pagini recente » Cod sursa (job #855016) | Cod sursa (job #231623) | Cod sursa (job #2829487) | Cod sursa (job #2202674) | Cod sursa (job #1555432)
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int MN = 100005;
int n,m;
int bit[MN];
void update(int idx,int val)
{
while (idx <= n)
{
bit[idx] += val;
idx += (idx & (-idx));
}
}
int query(int idx)
{
int sum = 0;
while (idx)
{
sum += bit[idx];
idx -= (idx & (-idx));
}
return sum;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i = 1;i <= n;i++)
{
int x;
scanf("%d",&x);
update(i,x);
}
while (m--)
{
int op;
scanf("%d",&op);
if (op < 2)
{
int a,b;
scanf("%d %d",&a,&b);
if (!op)
update(a,b);
else
printf("%d\n",query(b) - query(a - 1));
}
else
{
int a,left = 1,right = n,sol = -1;
scanf("%d",&a);
while (left <= right)
{
int middle = (left + right) / 2,val = query(middle);
if (val == a)
sol = middle;
if (val > a)
right = middle - 1;
else
left = middle + 1;
}
printf("%d\n",sol);
}
}
return 0;
}