Pagini recente » Cod sursa (job #2244824) | Cod sursa (job #1871296) | Cod sursa (job #310633) | Cod sursa (job #884217) | Cod sursa (job #2481474)
#include <cstdio>
#define zeros(x) ( (pos ^ (pos - 1)) & pos )
using namespace std;
const int NMAX = 100005;
int n,q;
int aib[NMAX];
inline void add(int pos,int val)
{
for(int i = pos ; i <= n ; i += zeros(i))
aib[i] += val;
}
inline int sum(int pos)
{
int ans = 0;
int i = pos;
while(i>0)
{
ans += aib[i];
i -= zeros(i);
}
return ans;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
int x;
scanf("%d%d",&n,&q);
for(int i = 1 ; i <= n ; i++)
{
scanf("%d",&x);
add(i,x);
}
while(q--)
{
int tip,a,b;
scanf("%d",&tip);
if(tip == 0)
{
scanf("%d%d",&a,&b);
add(a,b);
}
else if(tip == 1)
{
scanf("%d%d",&a,&b);
printf("%d\n",sum(b)-sum(a-1));
}
else
{
scanf("%d",&a);
b = 0;
for(int p = (1<<20) ; p ; p >>= 1)
if(b+p <= n && sum(b+p) <= a)
b+=p;
if(sum(b) == a && b)
printf("%d\n",b);
else
printf("-1\n");
}
}
return 0;
}