Pagini recente » Cod sursa (job #1548466) | Cod sursa (job #1446054) | Cod sursa (job #1344047) | Monitorul de evaluare | Cod sursa (job #1710463)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,op,x,y,val;
const int NMAX = 100003;
int aib[NMAX];
inline void Update(int poz,int x)
{
for(int i=poz;i<=n;i+=((-i)&i))
aib[i]+=x;
}
inline int Query(int poz)
{
int sum=0;
for(int i=poz;i>=1;i-=((-i)&i))
sum+=aib[i];
return sum;
}
inline int Cb(int sum)
{
int st=1,dr=n,poz=-1;
while(st<=dr)
{
int m=(st+dr)/2;
int s=Query(m);
if(s==sum)
{
poz=m;
dr=m-1;
}
else
if(s>sum)
dr=m-1;
else
st=m+1;
}
return poz;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
{
f>>val;
Update(i,val);
}
for(int i=1;i<=m;i++)
{
f>>op;
if(op==0)
{
f>>x>>y;
Update(x,y);
}
else
if(op==1)
{
f>>x>>y;
g<<Query(y)-Query(x-1)<<"\n";
}
else
{
f>>x;
g<<Cb(x)<<"\n";
}
}
return 0;
}