Pagini recente » Cod sursa (job #2239786) | Cod sursa (job #3274654) | Cod sursa (job #2824112) | Cod sursa (job #1311823) | Cod sursa (job #1988687)
#include <iostream>
#include <fstream>
#define dim 10000005
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,arb[dim];
void update(int pos,int val)
{
for(int i=pos; i<=n; i+=(i&-i))
arb[i]+=val;
}
int query(int val)
{
int ans=0;
for(int j=val; j>=1; j-=(j&-j))
ans+=arb[j];
return ans;
}
int Search(int val)
{
int st=1,dr=n,mij;
while(st<=dr)
{
mij=(st+dr)/2;
int ans=query(mij);
if(val==ans)
return mij;
else if(val<ans)
dr=mij-1;
else
st=mij+1;
}
return -1;
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
{
int x;
f>>x;
update(i,x);
}
int caz,a,b;
for(int i=1; i<=m; i++)
{
f>>caz;
if(caz==0)
{
f>>a>>b;
update(a,b);
}
else if(caz==1)
{
f>>a>>b;
g<<query(b)-query(a-1)<<'\n';
}
else if(caz==2)
{
f>>a;
g<<Search(a)<<'\n';
}
}
return 0;
}