Pagini recente » Cod sursa (job #1966270) | Cod sursa (job #1474180) | Cod sursa (job #2765585) | Cod sursa (job #49204) | Cod sursa (job #1891193)
#include <fstream>
#define Ndim 100001
#define zeros(x) x&(-x)
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int AIB[Ndim];
void update(int val,int i,int n)
{
for(i;i<=n;i+=zeros(i))
AIB[i]+=val;
}
int query(int i)
{
int sol = 0;
for(i;i>0;i-=zeros(i))
sol+=AIB[i];
return sol;
}
int binsrch(int val,int n)
{
int st=1,dr = n,mid;
while(st<=dr)
{
mid = (st+dr)/2;
int nr = query(mid);
if(nr < val)
st = mid+1;
else if(nr> val)
dr = mid-1;
else
return mid;
}
return -1;
}
int main()
{
int n,m,x,t,a,b,v,i;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
update(x,i,n);
}
for(i=1;i<=m;i++)
{
fin>>t;
if(t==0)
{
fin>>a>>b;
update(b,a,n);
}
else if(t==1)
{
fin>>a>>b;
fout<<query(b)-query(a-1)<<'\n';
}
else
{
fin>>v;
fout<<binsrch(v,n)<<'\n';
}
}
return 0;
}