Pagini recente » Profil carmen59 | Cod sursa (job #1775536) | Istoria paginii runda/abcdefghijklmnop/clasament | Cod sursa (job #2624416) | Cod sursa (job #1660772)
#include <iostream>
#include <fstream>
#define zeros(x) ((x^(x-1))&x)
using namespace std;
const int NMAX = 100001;
int A[NMAX];
int n,m;
void citire()
{
scanf("%d %d",&n,&m);
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
A[i] = x;
}
}
int Sum(int x)
{
int sum = 0;
for(int i=x;i>0;i--)
sum+=A[i];
return sum;
}
int binar(int a)
{
int x = 1,y=n;
int m;
while(x<=y)
{
m = (x+y)/2;
if(Sum(m)==a && Sum(m-1) < a)
return m;
else
{
if(Sum(m)>=a)
y = m-1;
else
x = m+1;
}
}
return -1;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
citire();
int q,a,b;
for(int i=1;i<=m;i++)
{
scanf("%d",&q);
if(q==0)
{
scanf("%d %d",&a,&b);
A[a]+=b;
continue;
}
if(q==1)
{
scanf("%d %d",&a,&b);
printf("%d\n",Sum(b)-Sum(a-1));
continue;
}
if(q==2)
{
scanf("%d",&a);
printf("%d\n",binar(a));
continue;
}
}
fclose(stdin);
fclose(stdout);
return 0;
}