Pagini recente » Cod sursa (job #2890627) | Cod sursa (job #1487212) | Cod sursa (job #1943337) | Cod sursa (job #852424) | Cod sursa (job #1606363)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,M,aib[100005];
inline void Update(int p, int x)
{
while(p <= n)
{
aib[p]+=x;
p +=(p&(-p));
}
}
inline int Query(int p)
{
int suma = 0;
while(p > 0)
{
suma+=aib[p];
p -= (p&(-p));
}
return suma;
}
inline int Search(int x)
{
int mid,sol,st,dr,v;
sol = -1;
st = 1, dr = n;
while(st <= dr)
{
mid = (st+dr)/2;
v = Query(mid);
if(v == x)
{
sol = mid;
dr = mid-1;
}
else if(v > x) dr = mid-1;
else st = mid+1;
}
return sol;
}
void Solve()
{
int i,op,p,x,t,a,b;
fin>>n>>M;
for(i=1;i<=n;++i)
{
fin>>x;
Update(i,x);
}
while(M--)
{
fin>>op;
if(op==0)
{
fin>>p>>x;
Update(p,x);
}
else if(op==1)
{
fin>>a>>b;
fout<<Query(b)-Query(a-1)<<"\n";
}
else
{
fin>>x;
fout<<Search(x)<<"\n";
}
}
}
int main()
{
Solve();
fout.close();
return 0;
}