Pagini recente » Cod sursa (job #2883326) | Cod sursa (job #1659461) | Cod sursa (job #898040) | Cod sursa (job #417108) | Cod sursa (job #1240552)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n,m,k,x,y,v[100001];
void add(int poz,int val)
{
int t=0;
while (poz<=n)
{
v[poz]+=val;
while (!(poz&1<<t))
t++;
poz+=1<<t;
t++;
}
}
int find(int poz)
{
int s=0,t=0;
while(poz>0)
{
s+=v[poz];
while (!(poz&1<<t))
t++;
poz-=1<<t;
t++;
}
return s;
}
int findmin(int s)
{
int i,t;
for (t=1;t<n;t<<=1);
for (i=0;t;t>>=1)
{
if (i+t<=n)
if (v[i+t]<=s)
{
i+=t;
s-=v[i];
if (!s)
return i;
}
}
return -1;
}
int main()
{
int i;
cin>>n>>m;
for (i=1;i<=n;i++)
{
cin>>x;
add(i,x);
}
for (i=1;i<=m;i++)
{
cin>>k;
if (!k)
{
cin>>x>>y;
add(x,y);
}
else if (k==1)
{
cin>>x>>y;
cout<<find(y)-find(x-1)<<'\n';
}
else
{
cin>>x;
cout<<findmin(x)<<'\n';
}
}
}