Pagini recente » Cod sursa (job #1306890) | Cod sursa (job #2931589) | Cod sursa (job #2749466) | Cod sursa (job #110827) | Cod sursa (job #3163869)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n,A[100005],i,m,a,b,c,j;
int query(int p)
{
int suma=0;
for (int i=p; i>=1; i-=(i&-i))
suma += A[i];
return suma;
}
void update(int p,int val)
{
for (int i=p; i<=n; i+=(i&-i))
A[i]+=val;
}
int suma(int suma)
{
int st=1,dr=n;
while(st<=dr)
{
int mij=(st+dr)/2;
if(query(mij)==suma)
return mij;
if(query(mij)>suma)
dr=mij-1;
else
st=mij+1;
}
return -1;
}
int main ()
{
cin>>n>>m;
for (i=1; i<=n; i++)
{
cin>>a;
update(i,a);
}
for(j=1;j<=m;j++)
{
cin>>c>>a;
if(c==0)
{
cin>>b;
update(a,b);
}
else
if(c==1)
{
cin>>b;
cout<<query(b)-query(a-1)<<"\n";
}
else
cout<<suma(a)<<"\n";
}
return 0;
}