Pagini recente » Cod sursa (job #1438144) | Cod sursa (job #941997) | Cod sursa (job #2353548) | Cod sursa (job #1465272) | Cod sursa (job #3285967)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n,m;
int aib[100001];
int query(int i)
{
int ans=0;
while(i>0)
{
ans+=aib[i];
i-=(i&(-i));
}
return ans;
}
void update(int i,int delta)
{
while(i<=n)
{
aib[i]+=delta;
i+=(i&(-i));
}
}
int seearch(int x)
{
if(x==0)
return -1;
int i=0;
for(int pas=(1<<16); pas>0; pas>>=1)
{
if(aib[i+pas]<=x and i+pas<=n)
{
x-=aib[i+pas];
i+=pas;
}
}
if(x==0)
return i;
return -1;
}
//int seearch(int a)
//{
// return 1;
//}
int main()
{
int x;
cin>>n>>m;
for(int i=1; i<=n; i++)
{
cin>>x;
update(i,x);
}
for(int i=1; i<=m; i++)
{
int cer,a,b;
cin>>cer;
if(cer==0)
{
cin>>a>>b;
update(a,b);
}
else if(cer==1)
{
cin>>a>>b;
cout<<query(b)-query(a-1)<<'\n';
}
else
{
cin>>a;
cout<<seearch(a)<<'\n';
}
}
//cout<<" HEEEEEEY";
return 0;
}