Pagini recente » Cod sursa (job #1698695) | Cod sursa (job #3169656)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n,x,m;
vector<int> A;
int zeros(int n)
{
return n & (-n);
}
void update(int nod,int e)
{
for(int i=nod;i<=n;i=i+zeros(i))
A[i]=A[i]+e;
}
int suma(int nod)
{
int s=0;
for(int i=nod;i>=1;i=i-zeros(i))
s=s+A[i];
return s;
}
int q;
int a,b;
int main()
{
cin>>n>>m;
A.resize(n+1);
for(int i=1;i<=n;i++)
{
cin>>x;
update(i,x);
}
for(int i=0;i<m;i++)
{
cin>>q;
switch(q)
{
case 0:
{
cin>>a>>b;
update(a,b);
break;
}
case 1:
{
cin>>a>>b;
int sa=suma(a-1);
int sb=suma(b);
cout<<sb-sa<<'\n';
break;
}
case 2:
{
cin>>a;
int poz=-1,st=1,dr=n;
while(st<=dr)
{
int mij=st+(dr-st)/2;
int s=suma(mij);
if(s==a)
poz=mij;
if(s>=a)
dr=mij-1;
else
st=mij+1;
}
cout<<poz<<'\n';
}
}
}
return 0;
}