Pagini recente » Cod sursa (job #2389859) | Cod sursa (job #1027681) | Cod sursa (job #1088920) | Cod sursa (job #2897904) | Cod sursa (job #3243474)
#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 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;
int l=0,r=n,mij=0,ok=0;
while(suma(v,mij)!=c)
{
mij=(l+r)/2;
if(suma(v,mij)>c)
r=mij;
else if(suma(v,mij)<c)
l=mij;
else
break;
if(l==r-1)
{
ok=1;
break;
}
}
if(ok==0)
cout << mij << '\n';
else if(suma(v,r)==c)
cout << r << '\n';
else
cout << -1 << '\n';
}
}
return 0;
}