Pagini recente » Cod sursa (job #2151875) | Cod sursa (job #1808243) | Cod sursa (job #2701411) | Cod sursa (job #2820135) | Cod sursa (job #2718918)
#include <bits/stdc++.h>
#define zeros(x) ((x^(x-1))&x)
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,v[100005],q,aib[100005];
void ad(int poz,int x)
{
for(int i=poz;i<=n;i+=zeros(i))
{
aib[i]+=x;
}
}
int sum(int poz)
{
int sol=0;
for(int i=poz;i>=1;i-=zeros(i))
sol+=aib[i];
return sol;
}
int solve(int sum)
{
int aux=0,step;
for ( step = 1; step < n; step <<= 1 );
for ( int i = 0; step; step >>= 1 )
{
if ( i + step <= n )
{
if ( sum >= aib[i + step] )
{
i += step;
sum -= aib[i];
if ( !sum ) return i;
}
}
}
return -1;
}
int main()
{
f>>n>>q;
for(int i=1;i<=n;i++){
f>>v[i];
ad(i,v[i]);
}
for(int i=1;i<=q;i++)
{
int tip,a,b;
f>>tip;
if(tip==0)
{
f>>a>>b;
ad(a,b);
}
if(tip==1)
{
f>>a>>b;
g<<sum(b)-sum(a-1)<<'\n';
}
if(tip==2)
{
f>>a;
g<<solve(a)<<'\n';
}
}
}