Pagini recente » Cod sursa (job #1477436) | Cod sursa (job #412622) | Cod sursa (job #1910705) | Cod sursa (job #3041996) | Cod sursa (job #2412401)
#include <bits/stdc++.h>
#define zero(x) (x&(-x))
using namespace std;
const int nmax=100005;
int aib[nmax];
void update(int poz, int val, int n)
{
for(poz; poz<=n; poz+=zero(poz))
{
int x=zero(poz);
aib[poz]+=val;
}
}
int suma(int poz)
{
int sum=0;
for(poz; poz>0; poz-=zero(poz))
sum+=aib[poz];
return sum;
}
int bin_search(int val, int n)
{
int beg=1, fin=n, m, x;
while(beg<=fin)
{
m=(beg+fin)/2;
x=suma(m);
if(x==val)
return m;
else if(x<val)
beg=m+1;
else
fin=m-1;
}
return -1;
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
int n, m, i, t, a, b;
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++)
{
scanf("%d", &a);
update(i, a, n);
}
for(i=1;i<=m;i++)
{
scanf("%d%d", &t, &a);
switch(t)
{
case 0:
scanf("%d", &b);
update(a, b, n);
break;
case 1:
scanf("%d", &b);
printf( "%d\n", suma(b)-suma(a-1));
break;
case 2:
printf("%d\n", bin_search(a, n));
break;
}
}
return 0;
}