Pagini recente » Atasamentele paginii Sirsort | Monitorul de evaluare | Cod sursa (job #2538349) | Cod sursa (job #2099910) | Cod sursa (job #3319881)
//
// main.cpp
// AIB
//
// Created by Andrada Minca on 03.11.2025.
//
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
vector<long long> aib;
int lsb(int x)
{
return (x&(-x));
}
void update(int x,int add)
{
for(int i=x;i<aib.size();i+=lsb(i))
{
aib[i]+=add;
}
}
long long query(int x)
{
long long sum=0;
for(int i=x;i>0;i-=lsb(i))
{
sum+=aib[i];
}
return sum;
}
int bs(long long s)
{
int ans=0;
long long sum=0;
for(int pas=(1<<17);pas>0;pas/=2)
{
if(ans+pas+1<aib.size()&&sum+aib[ans+pas]<s)
{
ans+=pas;
sum+=aib[ans];
}
}
if(query(ans+1)==s)
{
return ans+1;
}
else return -1;
}
int main()
{
int n,m;
cin>>n>>m;
aib.resize(n+1);
for(int i=0;i<n;i++)
{
long long x;
cin>>x;
update(i+1,x);
}
for(int i=0;i<m;i++)
{
int c;
cin>>c;
if(c==1)
{
int a,b;
cin>>a>>b;
cout<<query(b)-query(a-1)<<"\n";
}
else if(c==0)
{
int a,b;
cin>>a>>b;
update(a,b);
}
else{
int a;
cin>>a;
cout<<bs(a)<<'\n';
}
}
return 0;
}