Pagini recente » Cod sursa (job #2827593) | Cod sursa (job #692929) | Cod sursa (job #1339809) | Cod sursa (job #317807) | Cod sursa (job #2874895)
#include <bits/stdc++.h>
#define VECTOR_SIZE 100005
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int p,n,m,i,oper,a,b;
struct aib
{
int v[VECTOR_SIZE];
aib()
{
for(i=1;i<=n;i++)
v[i]=0;
}
void add(int p, int val)
{
for(i=p;i<=n;i+=(i&(-i)))
v[i]+=val;
}
int sum(int p)
{
int kenny=0;
for(i=p;i>0;i-=(i&(-i)))
{
kenny+=v[i];
}
return kenny;
}
int poz(int jumica)
{
int st=1, dr=n, ans=1;
while(st<=dr)
{
int m=(st+dr)/2;
if(sum(m)<=jumica)
{
st=m+1;
ans=m;
}
else
dr=m-1;
}
if(sum(ans)==jumica)
return ans;
return -1;
}
};
int main()
{
in>>n>>m;
aib penis;
for(i=1;i<=n;i++)
{
in>>a;
penis.add(i,a);
}
for(i=1;i<=m;i++)
{
in>>oper;
if(oper==0)
{
in>>a>>b;
penis.add(a,b);
}
else if(oper==1)
{
in>>a>>b;
out<<penis.sum(b)-penis.sum(a-1)<<'\n';
}
else
{
in>>a;
out<<penis.poz(a)<<'\n';
}
}
return 0;
}