Pagini recente » Cod sursa (job #3152774) | Istoria paginii runda/fgdgd | Cod sursa (job #730485) | Cod sursa (job #1455350) | Cod sursa (job #2570317)
#include<fstream>
int s[100005], n;
int len(int x)
{
return x-(x&(x-1));
}
int query(int pz)
{
int sum=0;
while(pz>0)
{
sum+=s[pz];
pz=pz-len(pz);
}
return sum;
}
void solve(int pz, int val)
{
while(pz<=n)
{
s[pz]+=val;
pz+=len(pz);
}
}
using namespace std;
int main() {
int m, a, b, i, nr, c, p, j, l, med;
ifstream cin("aib.in");
ofstream cout("aib.out");
cin>>n>>m;
for(i=1;i<=n;i++) {
cin>>nr;
solve(i, nr);
}
for(i=1;i<=m;i++)
{
cin>>c;
if(c==0 || c==1)
{
cin>>a>>b;
if(c==0)
solve(a, b);
if(c==1)
cout<<query(b)-query(a-1)<<"\n";
}
else
{
cin>>a;
if(a==0)
cout<<"-1";
else {
l=0;
med=1<<20;
while(med)
{
if(l+med<=n && a>=s[l+med])
{
l=l+med;
a=a-s[l];
}
med=med/2;
}
if(a==0)
cout<<l;
else
cout<<"-1";
}
cout<<"\n";
}
}
return 0;
}