Pagini recente » Cod sursa (job #1727828) | Cod sursa (job #780894) | Cod sursa (job #1262133) | Cod sursa (job #1520902) | Cod sursa (job #609879)
Cod sursa(job #609879)
#include <fstream>
using namespace std;
const int N=100005;
long long v[N];
int n;
ifstream in("aib.in");
ofstream out("aib.out");
inline int next(int x)
{
return (-x)&x;
}
void update(int x,int val)
{
for (;x<=n;x+=next(x))
v[x]+=val;
}
long long query(int x)
{
if (!x)
return 0;
long long val=0;
for (;x>0;x-=next(x))
val+=v[x];
return val;
}
int bs(int x)
{
int i,step=1<<16;
for (i=0;step;step>>=1)
if (i+step<=n && v[i+step]<=x)
{
i+=step;
x-=v[i];
}
return !x ? i : -1;
}
int main()
{
int q,x,y;
in>>n>>q;
for (int i=1;i<=n;i++)
{
in>>x;
update(i,x);
}
while (q--)
{
in>>x;
if (x==0)
{
in>>x>>y;
update(x,y);
continue;
}
if (x==1)
{
in>>x>>y;
out<<query(y)-query(x-1)<<"\n";
continue;
}
in>>x;
out<<bs(x)<<"\n";
}
return 0;
}