Pagini recente » Cod sursa (job #2945940) | Cod sursa (job #1635963) | Cod sursa (job #1923053) | Cod sursa (job #1642431) | Cod sursa (job #1208601)
#include<fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,x,a,b,A[100005];
inline void update(int p, int x)
{
for (;p<=n;p+=(p&-p))
A[p]+=x;
}
inline int suma(int p)
{
int s=0;
for (;p>0;p-=(p&-p))
s+=A[p];
return s;
}
inline int cautaresuma(int p)
{
int st,dr,mij;
st=1, dr=n;
while (st<=dr)
{
mij=st+(dr-st)/2;
if (suma(mij)>p)
dr=mij-1;
else
st=mij+1;
}
if (suma(dr)==p) return dr;
else return -1;
}
int main()
{
int i;
fin>>n>>m;
for (i=1;i<=n;++i)
{
fin>>x;
update(i,x);
}
for (i=1;i<=m;++i)
{
fin>>x;
switch (x)
{
case 0:
fin>>a>>b;
update(a,b);
break;
case 1:
fin>>a>>b;
fout<<suma(b)-suma(a-1)<<"\n";
break;
case 2:
fin>>a;
fout<<cautaresuma(a)<<"\n";
break;
}
}
return 0;
}