Pagini recente » Cod sursa (job #54952) | Istoria paginii utilizator/cristicristi8160 | Cod sursa (job #2029122) | Cod sursa (job #313712) | Cod sursa (job #1138985)
#include <cstdio>
#define bs(x) (x&(-x))
using namespace std;
int N, M, i, x, val, AIB[100001], a, b, t;
void add(int x, int val)
{
int i;
for (i=x; i<=N; i+=bs(i))
AIB[i]+=val;
}
int calcul(int x)
{
int rez=0, i;
for (i=x; i>0; i-=bs(i))
rez+=AIB[i];
return rez;
}
int bin_search(int x)
{
int st=1, dr=N, mij=0;
while (st<=dr)
{
mij=(st+dr)/2;
int S=calcul(mij);
if (S==x) return mij;
if (S>x) dr=mij-1;
else st=mij+1;
}
return -1;
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d%d", &N, &M);
for (i=1; i<=N; i++)
{
scanf("%d", &x);
add(i, x);
}
for (i=1; i<=M; i++)
{
scanf("%d", &t);
if (t==0)
{
scanf("%d%d", &x, &val);
add(x, val);
}
if (t==1)
{
scanf("%d%d", &a, &b);
printf("%d\n", calcul(b)-calcul(a-1));
}
if (t==2)
{
scanf("%d", &x);
printf("%d\n", bin_search(x));
}
}
return 0;
}