Pagini recente » Cod sursa (job #1026741) | Cod sursa (job #3243479)
#include <bits/stdc++.h>
using namespace std;
int a[150005];
int v[150005];
int suma(int BITree[],int index)
{
int sum=0;
while(index>0)
{
sum+=BITree[index];
index-=index & (-index);
}
return sum;
}
void updateBIT(int BITree[],int n,int index,int val)
{
while(index<=n)
{
BITree[index]+=val;
index+=index & (-index);
}
}
int cautarebinara(int l,int r,int val)
{
if(r>=l)
{
int mij=l+(r-l)/2;
if(suma(v,mij)==val)
return mij;
if(suma(v,mij)>val)
return cautarebinara(l,mij-1,val);
return cautarebinara(mij+1,r,val);
}
return -1;
}
int main()
{
ifstream cin("aib.in");
ofstream cout("aib.out");
int n,m,b,c,d;
cin >> n >> m;
for(int z=1;z<=n;z++)
{
cin >> a[z];
updateBIT(v,n,z,a[z]);
}
for(int i=1;i<=m;i++)
{
int sum1=0,sum2=0;
cin >> b;
if(b==0)
{
cin >> c >> d;
updateBIT(v,n,c,d);
}
else if(b==1)
{
cin >> c >> d;
sum2=suma(v,d);
sum1=suma(v,c-1);
cout << sum2-sum1 << '\n';
}
else
{
cin >> c;
cout << cautarebinara(1,n,c) << '\n';
}
}
return 0;
}