Pagini recente » Cod sursa (job #878121) | Cod sursa (job #955628) | Cod sursa (job #157954) | Cod sursa (job #1526511) | Cod sursa (job #2528939)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int sync();
int aib[100005],n,m;
void adaugare(int a,int b)
{
for(int i=a; i<=n; i+=(i&(-i)))
aib[i]+=b;
}
int suma(int a,int b)
{ int sum1=0,sum2=0;
for(int i=b;i>0; i-=(i&(-i)))
sum1+=aib[i];
for(int i=a-1;i>0; i-=(i&(-i)))
sum2+=aib[i];
return sum1-sum2;
}
void cauta(int a)
{
int s=1,d=min(a,n);
while (s<=d)
{
int m=(s+d)/2;
int x=suma(1,m);
if (a<x)
{
d=m-1;
}
if (a>x)
{
s=m+1;
}
if (a==x)
{
fout<<m;
return;
}
}
fout<< -1;
return;
}
void interogare()
{
fin>>n>>m;
int x,a,b;
for(int i=1; i<=n; i++)
fin>>x,adaugare(i,x);
for(int i=1; i<=m; i++)
{
fin>>x;
if(x==0)
{
fin>>a>>b;
adaugare(a,b);
}
else if(x==1)
{
fin>>a>>b;
fout<<suma(a,b);
}
else
{
fin>>a;
cauta(a);
}
if(x!=0)
fout<<endl;
}
}
int main()
{
interogare();
return 0;
}