Pagini recente » Cod sursa (job #1386859) | Cod sursa (job #2859149) | Cod sursa (job #66009) | Cod sursa (job #320159) | Cod sursa (job #2802955)
#include <bits/stdc++.h>
#define ub(x) (x&(-x))
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,i,x,aib[400005],a,b,ex;
void Add(int x, int val)
{
for(int i=x;i<=n;i+=ub(i))
aib[i]+=val;
}
int sum(int x)
{
int s=0;
for(int i=x;i>0;i-=ub(i))
s+=aib[i];
return s;
}
int cautbin(int x) {
int st=1,dr=n;
while (st<=dr) {
int mid=(st+dr)/2;
int s=sum(mid);
if (x==s)
return mid;
if (x>s)
st=mid+1;
else
dr=mid-1;
}
return -1;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
Add(i,x);
}
for(i=1;i<=m;i++)
{
fin>>ex;
if(ex==0)
{
fin>>a>>b;
Add(a,b);
}
else if(ex==1)
{
fin>>a>>b;
fout<<sum(b)-sum(a-1)<<'\n';
}
else
{
fin>>a;
fout<<cautbin(a)<<'\n';
}
}
return 0;
}