Pagini recente » Cod sursa (job #2326858) | Cod sursa (job #162605) | Cod sursa (job #549464) | Cod sursa (job #1385507) | Cod sursa (job #2331347)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
#define NMAX 100005
int n,m,x,op,a,b;
int c[NMAX];
int zero(int x)
{
return x&(x^(x-1));
}
void update(int poz,int val)
{
for(int i=poz;i<=n;i+=zero(i))
c[i]+=val;
}
int sum(int x)
{
int s=0;
for(int i=x;i>0;i-=zero(i))
s+=c[i];
return s;
}
int binar(int x)
{
int st=1,dr=n,rez=-1,suma,mij;
while(st<=dr)
{
mij=(st+dr)/2;
suma=sum(mij);
if(suma<x)
st=mij+1;
else if(suma>x)
dr=mij-1;
else {
rez=mij;
dr=mij-1;
}
}
return rez;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>x;
update(i,x);
}
for(int i=1;i<=m;i++)
{
fin>>op;
if(op==0)
{
fin>>a>>b;
update(a,b);
}
else if(op==1)
{
fin>>a>>b;
fout<<sum(b)-sum(a-1)<<'\n';
}
else {
fin>>a;
fout<<binar(a)<<'\n';
}
}
return 0;
}