Pagini recente » Cod sursa (job #1718649) | Cod sursa (job #1450761) | Cod sursa (job #2547654) | Cod sursa (job #2543103) | Cod sursa (job #2772843)
#include <fstream>
using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
long long a,b,c,n,m,i,x,aib[200000];
void up(int p,int x)
{
for(long i=p;i<=n;i+=(i&(-i)))
{
aib[i]+=x;
}
}
long long sum(long long p)
{
long long s=0;
for(long i=p;i>=1;i-=(i&(-i)))
{
s+=aib[i];
}
return s;
}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>x;
up(i,x);
}
for(i=1;i<=m;i++)
{
in>>a>>b;
if(a==0)
{in>>c;
up(b,c);
}
else
{
if(a==1)
{in>>c;
long long s1=0;
s1=sum(c)-sum(b-1);
out<<s1<<'\n';
}
else
{
long long st=1;
long long dr=n;
long long mid=0;
int ok=0;
while(st<=dr)
{
mid=(st+dr)/2;
long long nr=sum(mid);
if(nr==b){ok=1;out<<mid<<'\n';break;}
if(nr>b)dr=mid-1;
if(nr<b)st=mid+1;
}
if(ok==0)out<<-1<<'\n';
}
}
}
return 0;
}