Pagini recente » Cod sursa (job #2896705) | Cod sursa (job #2831228) | Cod sursa (job #1885358) | Cod sursa (job #1994993) | Cod sursa (job #1081240)
#include<fstream>
#define NMAX 100010
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, m, a[NMAX];
inline int ultim(int x)
{
return x^(x&(x-1));
}
int suma(int lim, int pz)
{
int sum=0;
for (; pz>lim; pz-=ultim(pz)) sum+=a[pz];
return sum;
}
void Citeste()
{
int i;
f>>n>>m;
for (i=1; i<=n; ++i)
{
f>>a[i];
a[i]+=suma(i-ultim(i), i-1);
}
}
void Update(int pz, int val)
{
for (; pz<=n; pz+=ultim(pz)) a[pz]+=val;
}
void Solve()
{
int op, st, dr, mij, gas, x, y, S;
while (m--)
{
f>>op;
if (op==0)
{
f>>x>>y;
Update(x, y);
}
else
if (op==1)
{
f>>x>>y;
g<<suma(0, y)-suma(0, x-1)<<"\n";
}
else
{
f>>x;
st=1; dr=n; gas=-1;
while (st<=dr)
{
mij=(st+dr)/2;
S=suma(0, mij);
if (S==x)
{
gas=mij;
break;
}
else
if (S>x) dr=mij-1;
else st=mij+1;
}
g<<gas<<"\n";
}
}
}
int main()
{
Citeste();
Solve();
f.close();
g.close();
return 0;
}