Pagini recente » Cod sursa (job #2217747) | Cod sursa (job #2450249) | Cod sursa (job #2507940) | Cod sursa (job #901532) | Cod sursa (job #1827712)
#include <fstream>
using namespace std;
ifstream f ("aib.in");
ofstream g("aib.out");
int n,m,i,j,x,a,b,s,aib[100000],c,st,dr,mij;
bool ok;
int ub (int i)
{
return i&(-i);
}
void add (int i,int x)
{
int j;
for(j=i; j<=n; j+=ub(j))
aib[j]+=x;
}
int sum (int a)
{
int i;
s=0;
for(i=a; i>0; i-=ub(i))
s+=aib[i];
return s;
}
int main()
{
f>>n>>m;
for(i=1; i<=n; i++)
{
f>>x;
add(i,x);
}
for(i=1; i<=m; i++)
{
f>>c;
if(c==0)
{
f>>a>>b;
add(a,b);
}
if(c==1)
{
f>>a>>b;
s=0;
s=sum(b)-sum(a-1);
g<<s<<'\n';
}
if(c==2)
{
f>>a;
st=1;
dr=n;
ok=false;
while(st<=dr)
{
mij=(st+dr)/2;
if(a>sum(mij)) st=mij+1;
if(a<sum(mij)) dr=mij-1;
if(a==sum(mij)) {g<<mij<<'\n'; ok=true; break;}
}
if(ok==false) g<<"-1";
}
}
return 0;
}