Pagini recente » Cod sursa (job #2469314) | Cod sursa (job #1867820) | Cod sursa (job #1076926) | Cod sursa (job #91273) | Cod sursa (job #1760851)
#include <iostream>
#include <cstdio>
using namespace std;
int aib[1000],m,n,vCitire[1000];
int nrZerouri(int x)
{
return x&(x^(x-1));
}
void inserare(int a,int b)
{
for(int i=a; i<=n; i+=nrZerouri(i))
aib[i]+=b;
}
int suma(int b)
{
int rez=0;
for(int i=b; i>=1; i-=nrZerouri(i))
rez+=aib[i];
return rez;
}
void citire()
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%d",&vCitire[i]);
inserare(i,vCitire[i]);
}
}
int cautK(int y)
{
int st=1,dr=n;
while(st<=dr)
{
int mij=(st+dr)/2;
if(suma(mij)==y)
{
return mij;
}
if(suma(mij)<y)
st=mij+1;
if(suma(mij)>y)
dr=mij-1;
}
return -1;
}
void afisare()
{
for(int i=1; i<=n; i++)
cout<<aib[i]<<" ";
cout<<endl;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
citire();
//afisare();
int x,y,z;
for(int i=1; i<=m; i++)
{
scanf("%d",&x);
if(x==0)
{
scanf("%d%d",&y,&z);
inserare(y,z);
//afisare();
}
if(x==1)
{
scanf("%d%d",&y,&z);
printf("%d\n",(suma(z)-suma(y-1)));
//afisare();
}
if(x==2)
{
scanf("%d",&y);
printf("%d\n",cautK(y));
//afisare();
}
}
return 0;
}